1

csv ファイルの読み取りによる入力データの変換に助けが必要です。もう少しインテリジェントな構造に変換したいと思います。おそらくいくつかの累積的な処理があると思っていましたが、どうすればよいかわかりません。

私の入力XML:

<lines>
    <line number="1">Header, some header data 1</line>
    <line number="2">Data, some data for 1</line>
    <line number="3">Data, some data for 1</line>
    <line number="4">Header, some header data for 2</line>
    <line number="5">Data some data for 2</line>
</lines>

必要な出力は、Header という単語を使用してチャンクに分類することです。

<?xml version="1.0" encoding="UTF-8"?>
<lines>
    <Block>
        <line number="1">Header, some header data 1</line>
        <line number="2">Data, some data for 1</line>
        <line number="3">Data, some data for 1</line>
    </Block>
    <Block>
        <line number="4">Header, some header data for 2</line>
        <line number="5">Data some data for 2</line>
    </Block>
</lines>

乾杯

4

1 に答える 1

0

この変換:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:key name="kFollowing" match="line[not(substring-before(.,',')='Header')]"
  use="generate-id(preceding-sibling::line[substring-before(.,',')='Header'][1])"
  />

 <xsl:template match="/*">
     <lines>
       <xsl:apply-templates select="*[substring-before(.,',')='Header']"/>
     </lines>
 </xsl:template>

 <xsl:template match="line">
  <Block>
    <xsl:copy-of select=".|key('kFollowing', generate-id())"/>
  </Block>
 </xsl:template>
</xsl:stylesheet>

提供された XML ドキュメントに適用した場合:

<lines>
    <line number="1">Header, some header data 1</line>
    <line number="2">Data, some data for 1</line>
    <line number="3">Data, some data for 1</line>
    <line number="4">Header, some header data for 2</line>
    <line number="5">Data some data for 2</line>
</lines>

必要な正しい結果が生成されます。

<lines>
   <Block>
      <line number="1">Header, some header data 1</line>
      <line number="2">Data, some data for 1</line>
      <line number="3">Data, some data for 1</line>
   </Block>
   <Block>
      <line number="4">Header, some header data for 2</line>
      <line number="5">Data some data for 2</line>
   </Block>
</lines>
于 2012-10-11T13:08:47.180 に答える