对不起,我已经更新了下面的问题。
虽然之前看起来很简单,但后来变成了一件很复杂的事情。谁能帮我吗?
我需要这个 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。任何帮助都会有很大的帮助。