我正在使用以下格式的XML文件。
<Main>
<root>
<group firstname="daniel" secondname="creig">
<a firstname="tin" secondname="tao"/>
<b firstname="bella" secondname="james">
<c firstname="khadhar" secondname="abdul">
<d firstname="xiang" secondname="tin"/>
</c>
</b>
</group>
</root>
</Main>
我正在努力获得如下的输出。
<members>
<member><id>group</id><firstname>daniel</firstname><secondname>creig</secondname></member>
<member><id>a</id><firstname>tin</firstname><secondname>tao</secondname></member>
<member><id>b</id><firstname>bella</firstname><secondname>james</secondname></member>
<member><id>c</id><firstname>khadhar</firstname><secondname>abdul</secondname></member>
<member><id>d</id><firstname>xiang</firstname><secondname>tin</secondname></member>
</members>
到目前为止,我的XSL将会是这样的。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- Elements Section -->
<xsl:template match="/*/root/*">
<member>
<id>
<xsl:value-of select="local-name()" />
</id>
<attr>
<xsl:apply-templates select="@*" />
</attr>
</member>
</xsl:template>
<xsl:template match="@*">
<xsl:element name="{local-name()}">
<xsl:value-of select="(.)" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
我需要的是将任何深度的XML树中的节点转换为数组。在此先感谢。
答案 0 :(得分:1)
这是怎么回事:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<members>
<xsl:apply-templates select="@* | node()" />
</members>
</xsl:template>
<xsl:template match="root//*">
<member>
<id><xsl:value-of select="local-name(.)" /></id>
<xsl:apply-templates select="@*" />
</member>
<xsl:apply-templates select="*" />
</xsl:template>
<xsl:template match="root//@*">
<xsl:element name="{local-name(.)}">
<xsl:value-of select="." />
</xsl:element>
</xsl:template>
</xsl:stylesheet>