我有一个要求,我必须从不同的层次结构中提取和列出 id。下面是示例 XML:(我提供了 3 级层次结构来反映肤色)
输入 XML:
<Wrapper>
<A Id="A@1">
<B Id="B#1">
<C Id="C$1"/>
<C Id="C$2"/>
</B>
<B Id="B#2">
<C Id="C$3"/>
<C Id="C$4"/>
</B>
<B Id="B#3">
<C Id="C$5"/>
<C Id="C$6"/>
</B>
<B Id="B#4>
<C Id="C$7"/>
<C Id="C$8"/>
</B>
</A>
</Wrapper>
期望的输出:
A Ids:
A@1
B Ids:
B#1
B#2
B#3
B#4
C Ids:
C$1
C$2
C$3
C$4
C$5
C$6
C$7
C$8
输入 XSL:原理很简单:我遇到根元素“\”写入文本和 for-each 层次结构我提供绝对 XPath 和访问 Id .. 下面是代码:
<?xml version ="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="linefeed" select="' '"/>
<xsl:template match="/">
<!--List of A Ids-->
<xsl:text>A Ids:</xsl:text>
<xsl:value-of select="$linefeed"/>
<xsl:for-each select="/Wrapper/A/@Id">
<xsl:value-of select="concat(.,$linefeed)"/>
</xsl:for-each>
<xsl:value-of select="$linefeed"/>
<!--List of B Ids-->
<xsl:text>B Ids:</xsl:text>
<xsl:value-of select="$linefeed"/>
<xsl:for-each select="/Wrapper/A/B/@Id">
<xsl:value-of select="concat(.,$linefeed)"/>
</xsl:for-each>
<xsl:value-of select="$linefeed"/>
<!--List of C Ids-->
<xsl:text>C Ids:</xsl:text>
<xsl:value-of select="$linefeed"/>
<xsl:for-each select="/Wrapper/A/B/C/@Id">
<xsl:value-of select="concat(.,$linefeed)"/>
</xsl:for-each>
<xsl:value-of select="$linefeed"/>
</xsl:template>
</xsl:stylesheet>
有没有更好的办法??