我有以下XML值:
<Specialties>
<Specialty>
<Type>ZZ</Type>
<Code>DF</Code>
<Desc>DF</Desc>
</Specialty>
<Specialty>
<Type>ZZ</Type>
</Specialty>
<Specialty>
<Type>ZZ</Type>
<Code>AF</Code>
<Desc>AF</Desc>
</Specialty>
</Specialties>
现在我需要为此创建XLST,以便我可以像这样转换输出:
<Specialties>
<Specialty Type="ZZ" Code="DF" Desc="DF"/>
<Specialty Type="ZZ"/>
<Specialty Type="ZZ" Code="AF" Desc="AF"/>
</Specialties>
我尝试过写这样的XSLD:
<Specialties>
<xsl:for-each select="/Specialties/*">
<Specialty>
<xsl:for-each select="/Specialties/Specialty/*">
<xsl:attribute name="{name()}">
<xsl:value-of select="text()"/>
</xsl:attribute>
</xsl:for-each>
</Specialty>
</xsl:for-each>
</Specialties>
但是它给出了输出:
<Specialties>
<Specialty Type="ZZ" Code="AF" Desc="AF"/>
<Specialty Type="ZZ" Code="AF" Desc="AF"/>
<Specialty Type="ZZ" Code="AF" Desc="AF"/>
</Specialties>
所以我的问题是,如何通过编写XSLT获得所需的输出?
答案 0 :(得分:1)
更改此行....
<xsl:for-each select="/Specialties/Specialty/*">
就是这个......
<xsl:for-each select="*">
这将获取当前节点的所有子节点。当您使用/
启动表达式时,这表示顶级文档节点,因此它将获取文档中所有Specialty
个节点的所有子节点。