如何使用XSLT从子节点获取父节点

时间:2018-05-21 00:52:18

标签: xml xslt

我无法检索所有父母重复的孩子名字。

<NCAAScores>
   <levels>
      <level>
         <name>Western Conference</name>
         <teams>
            <team>
               <name>Dallas Stars</name>
               <scorable>
                  <win>60</win>
                  <lose>35</lose>
               </scorable>
            </team>
            <team>
               <name>Chicago Blackhawks</name>
               <scorable>
                  <win>60</win>
                  <lose>23</lose>
               </scorable>
            </team>
            <team>
               <name>Edmonton Oilers</name>
               <scorable>
                  <win>55</win>
                  <lose>9</lose>
               </scorable>
            </team>
            <team>
               <name>Philadelphia Flyers</name>
               <scorable>
                  <win>5</win>
                  <lose>9</lose>
               </scorable>
            </team>
         </teams>
      </level>
      <level>
         <name>Eastern Conference</name>
         <teams>
            <team>
               <name>Dallas Stars</name>
               <scorable>
                  <win>1</win>
                  <lose>34</lose>
               </scorable>
            </team>
<!---And so on, you get the idea-->  
         </teams>
      </level>
  </levels>
</NCAAScores>

如果我想要检索拥有团队“达拉斯之星”的所有父级别,那会是什么方法?

我试过下面的

./levels[/level/teams/team/name = 'Dallas Stars']

,这没有帮助。

2 个答案:

答案 0 :(得分:1)

请尝试以下模板。这使用ancestor::轴从当前节点上下文中查找level/name

<xsl:template match="level">
    <xsl:for-each select="teams/team[name='Dallas Stars']">
        <name>
            <xsl:value-of select="ancestor::level/name" />
        </name>
    </xsl:for-each>
</xsl:template>

或者,您也可以使用

<xsl:value-of select="../../name" />

从当前节点上下文上升级别,但我更喜欢使用ancestor以便于理解。

输出

<name>Western Conference</name>
<name>Eastern Conference</name>

答案 1 :(得分:1)

您提到的类型错误来自将节点与字符串进行比较。您必须首先从节点中提取文本。试试这个:

//levels/level[teams/team/name/text()='Dallas Stars']/name

我在这里准备它作为小提琴:https://xsltfiddle.liberty-development.net/6qVRKw2/1