私は検索して解決策を見つけることに近づきましたが、それにはStylesheet 2.0が必要で、1.0で立ち往生しています。
これは私が持っているサンプル XML です。
<root>
<row>A1: Apples</row>
<row>B1: Red</row>
<row>C1: Reference text</row>
<row>badly formatted text which belongs to row above</row>
<row>and here.</row>
<row>D1: ABC</row>
<row>E1: 123</row>
<row>A1: Oranges</row>
<row>B1: Purple</row>
<row>C1: More References</row>
<row>with no identifier</row>
<row>again and here.</row>
<row>D1: DEF</row>
<row>E1: 456</row>
.
.
私はそれが次のようになりたい:
<root>
<row>
<A1>Apples</A1>
<B1>Red</B1>
<C1>Reference text badly formatted text which belongs to row above and here.</C1>
<D1>ABC</D1>
<E1>123</E1>
</row>
<row>
<A1>Oranges</A1>
<B1>Purple</B1>
<C1>More Reference with no identifier again and here.</C1>
<D1>DEF</D1>
<E1>456</E1>
</row>
.
.
これには、他のユーティリティを使用して変換できるパターンがありますが、XSL 1.0 では非常に困難です。
使用できる要素内に見出しがあり、参照テキスト フィールドは XML に変換されると複数行になり、行ごとに独自の行が作成されますが、常に C1 と D1 の間で同じ位置にあります。要素の実際の名前は重要ではありません。
行は E1 の後に分割する必要があります。私の例は簡単だと思いますが、この変換はそうではありません。私は XML/XSL の初心者でさえありません。私はゼロから学んでいますが、その後、他のプロジェクトにシフトして、再びそれに戻らなければなりません。ティア。
更新: 少し異なる構造で遭遇した別のケースですが、結果を同じにしたい:
<root>
<row>
<Field>A1: Apples</Field>
</row>
<row>
<Field>B1: Red</Field>
</row>
<row>
<Field>C1: Reference text</Field>
</row>
<row>
<Field>badly formatted text which belongs to row above</Field>
</row>
<row>
<Field>and here.</Field>
</row>
<row>
<Field>D1: ABC</Field>
</row>
<row>
<Field>E1: 123</Field>
</row>
<row>
<Field>A1: Oranges</Field>
</row>
<row>
<Field>B1: Purple</Field>
</row>
<row>
<Field>C1: More References</Field>
</row>
<row>
<Field>with no identifier</Field>
</row>
<row>
<Field>again and here.</Field>
</row>
<row>
<Field>D1: DEF</Field>
</row>
<row>
<Field>E1: 456</Field>
</row>
恒等変換を適用しようとしましたが、うまくいかなかったようです:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match ="row/Field">
<xsl:apply-templates/>
</xsl:template>