我无法检索所有父母重复的孩子名字。
<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']
,这没有帮助。
答案 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