我有一个带有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,..}
答案 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>