XPath:如何获取属性值已知的节点的属性

时间:2014-06-04 15:40:46

标签: xml xpath xslt-1.0

我有一个带有id-s列(令牌)的集合($ targets)。 我遍历它并为每个列的id(。)我想获得具有这样的id的列,然后从这个表 - 列节点我想获得@val属性:

<xsl:for-each select="exsl:node-set($targets)/token">
    <xsl:variable name="column" select="string(.)" />
    <xsl:value-of select="//aui:table-column[@id=$column]/@val"/>
</xsl:for-each>

我知道我有一个唯一的正确id,但这个XPath得到了空字符串,

集合和for-each工作正常:如果我更换

//aui:table-column[@id=$column]/@val

string(.)

列id-s的值好像{col1,col2,..}

2 个答案:

答案 0 :(得分:0)

您的string(.)位于column元素节点的上下文中。这是它的条件。将令牌放入变量。

<xsl:for-each select="exsl:node-set($targets)/token">
    <xsl:variable name="token" select="normalize-space(.)"/>
    <xsl:value-of select="//column[@id=$token]/@val"/>
</xsl:for-each>

normalize-space()将节点强制转换为字符串并规范化空格。

答案 1 :(得分:0)

解释 - 我在我的for-each采样的上下文中搜索了表列,这些采样是由标记化后生成的节点组成的,所以我什么也没找到。

代码应该包含一个辅助变量,如下所示:

<xsl:variable name="docroot" select="/" />
<xsl:for-each select="exsl:node-set($targets)/token">
    <xsl:variable name="column" select="string(.)" />
    <xsl:value-of select="$docroot//aui:table-column[@id=$column]/@val"/>
</xsl:for-each>