麻烦循环遍历XML元素

时间:2015-12-29 19:25:57

标签: xml loops xslt nodes

我在循环节点时遇到问题。我有工作示例,但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>&#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>

不知道为什么这不起作用。

1 个答案:

答案 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>&#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>

产生以下输出:

<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>