我有一个看起来像这样的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
不起作用。
答案 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"/>
不起作用