申し訳ありませんが、以下の問題を更新しました。
最初は本当に単純に見えたのに、後で本当に複雑なものに変わりました。誰でも私を助けることができますか?
この XML が必要です
<?xml version="1.0" encoding="UTF-8"?>
<RecordSet>
<Data image="h1.gif" description="a"/>
<Data image="" description="asdf" />
<Data image="" description="bsdf"/>
<Data image="" description="csdf"/>
<Data image="h2.gif" description="b"/>
<Data image="" description="dsdf"/>
<Data image="" description="esdf"/>
<Data image="h3.gif" description="c"/>
<Data image="" description="sdff"/>
</RecordSet>
これに変換
<RecordSet>
<MenuHeader image="h1.gif">
<Menu description="a"/>
<Menu description="b"/>
<Menu description="c"/>
</MenuHeader>
<MenuHeader image="h2.gif">
<Menu description="d"/>
<Menu description="e"/>
</MenuHeader>
<MenuHeader image="h3.gif">
<Menu description="f"/>
</MenuHeader>
</RecordSet>
使用されるスタイルシート
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="RecordSet">
<RecordSet>
<xsl:for-each select="Data[not(@image='')]">
<MenuHeader image="{@image}">
<xsl:copy-of select="key('d',@image)"/>
</MenuHeader>
</xsl:for-each>
</RecordSet>
</xsl:template>
<xsl:key name="d"
match="Data[@description]"
use="preceding-sibling::Data[@image][1]/@image"/>
</xsl:stylesheet>
実際の出力:
<?xml version="1.0" encoding="UTF-8"?>
<RecordSet>
<MenuHeader image="h1.gif">
<Data image="" description="asdf"/>
</MenuHeader>
<MenuHeader image="h2.gif">
<Data image="" description="dsdf"/>
</MenuHeader>
<MenuHeader image="h3.gif">
<Data image="" description="sdff"/>
</MenuHeader>
</RecordSet>
更新: 値を持つイメージ属性を持つデータ ノードは、MenuHeader として設定する必要があります。どんな助けも本当に大きな助けになります。