在Xpath中获取节点的属性值

时间:2014-01-28 10:51:14

标签: xml xslt xpath

我有一个看起来像这样的XML数据结构

<menu>
   <sport id="1580" name="Foo" />
   <sport id="1581" name="Bar" />
   ...

在XSL中,我需要通过<sport>属性选择适当的id节点并打印出name属性。我正在通过这个表达式选择节点

{document('foo.xml')/menu/sport[@id = $id]

工作正常,但无法弄清楚如何在同一元素上获取name属性。做

{document('odkazy.xml')/menu/sport[@id = $id]/@name

不起作用。

2 个答案:

答案 0 :(得分:2)

删除XPath表达式开头的尾随花括号。变化

<xsl:value-of select="{document('odkazy.xml')/menu/sport[@id = $id]/@name"/>

<xsl:value-of select="document('odkazy.xml')/menu/sport[@id = $id]/@name"/>

也可以在XSLT中使用Curly括号。但它们表示属性值模板:

<element name="{document('odkazy.xml')/menu/sport[@id = $id]/@name}"/>

This是解释属性值模板的XSLT规范的相关部分。

答案 1 :(得分:0)

您是否可以将变量设置为id,甚至是for-each,以设置正确的运动。然后输出名称;

<xsl:variable name="sportName" select="document('odkazy.xml')/menu/sport[@id = $id]" />
<xsl:value-of select ="$sportName/@name"/>

不确定下面会有多好用,但值得一试?

<xsl:for-each select="document('odkazy.xml')/menu/sport[@id = $id]">
<xsl:value-of select ="@name"/>
</xsl:for-each/>

可能都是胡说八道,因为我无法理解为什么

<xsl:value-of select="document('odkazy.xml')/menu/sport[@id = $id]/@name"/>

不起作用