2015-12-29 134 views
1

我在循环节点时遇到问题。我有一些工作示例,但XML布局稍有不同。通过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标签之间的随机信息的列表(如“喜欢打外”)下的每个家庭。到目前为止,我只能得到一个姓氏的名单。

XSLT

<xsl:for-each select="//FAMILY/FAMILY_NAMES"> 
    <xsl:value-of select="@name"></xsl:value-of><xsl:text>&#xa;</xsl:text> 
    <xsl:for-each select="KID"> 
    <xsl:value-of select="KID"></xsl:value-of><xsl:text>&#xa;</xsl:text> 
    </xsl:for-each> 
</xsl:for-each> 

只是不知道为什么,这是行不通的。

回答

0

当你遍历每个KID,当前节点已经是每个KID,所以得到KID使用<xsl:value-of select="."/>,不="KID"的字符串值。

这XSLT

<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>&#xa;</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>&#xa;</xsl:text> 
     </xsl:for-each> 
    </xsl:for-each> 
    </xsl:template> 

</xsl:stylesheet> 

应用到您输入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> 

产生以下的输出:

Smith 
    Jim: First Born 
    Joe: Enjoys playing outside 
    Jon: Straight A student 
Barnes 
    Mike: Just got his license 
    Dan: On vacation 
    Ken: Going to graduate school 
Thompsons 
    James: Loves sports 
    Ben: Middle Child 
    Frank: Youngest child 
+0

非常感谢。这工作完美。它的格式也很好。我必须仔细阅读并理解每一行。非常感谢。 – user1898629