我在循环节点时遇到问题。我有工作示例,但XML布局略有不同。
XML
<FAMILY>
<FAMILY_NAMES id="1" name="Smith">
<KID name="Jim">First Born</KID>
<KID name="Joe">Enjoys playing outside</KID>
<KID name="Jon">Straight A student</KID>
</FAMILY_NAMES>
<FAMILY_NAMES id="2" name="Barnes">
<KID name="Mike">Just got his license</KID>
<KID name="Dan">On vacation</KID>
<KID name="Ken">Going to graduate school</KID>
</FAMILY_NAMES>
<FAMILY_NAMES id="3" name="Thompsons">
<KID name="James">Loves sports</KID>
<KID name="Ben">Middle Child</KID>
<KID name="Frank">Youngest child</KID>
</FAMILY_NAMES>
</FAMILY
我能够获得一系列家庭,但我需要获得每个家庭下KID
标签(例如&#34;喜欢外出和#34;)之间的随机信息列表。到目前为止,我只能获得姓氏列表。
XSLT
<xsl:for-each select="//FAMILY/FAMILY_NAMES">
<xsl:value-of select="@name"></xsl:value-of><xsl:text>
</xsl:text>
<xsl:for-each select="KID">
<xsl:value-of select="KID"></xsl:value-of><xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
不知道为什么这不起作用。
答案 0 :(得分:0)
当您遍历每个KID
时,当前节点已经是KID
,因此要获取KID
使用<xsl:value-of select="."/>
的字符串值,而不是{{1 }}
此XSLT
="KID"
应用于您的输入XML,
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" version="1.0"/>
<xsl:template match="/">
<xsl:for-each select="/FAMILY/FAMILY_NAMES">
<xsl:value-of select="@name"/>
<xsl:text>
</xsl:text>
<xsl:for-each select="KID">
<xsl:text> </xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>: </xsl:text>
<xsl:value-of select="."/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
产生以下输出:
<FAMILY>
<FAMILY_NAMES id="1" name="Smith">
<KID name="Jim">First Born</KID>
<KID name="Joe">Enjoys playing outside</KID>
<KID name="Jon">Straight A student</KID>
</FAMILY_NAMES>
<FAMILY_NAMES id="2" name="Barnes">
<KID name="Mike">Just got his license</KID>
<KID name="Dan">On vacation</KID>
<KID name="Ken">Going to graduate school</KID>
</FAMILY_NAMES>
<FAMILY_NAMES id="3" name="Thompsons">
<KID name="James">Loves sports</KID>
<KID name="Ben">Middle Child</KID>
<KID name="Frank">Youngest child</KID>
</FAMILY_NAMES>
</FAMILY>