我有一个集合($targets),具有id-s列(token)。我循环遍历它并获取每个列的id(。)我想获得具有这样id的列然后从这个表-列节点我想获得@val attribute:
<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 get的空字符串,
集合和for-each工作正常:如果我替换
//aui:table-column[@id=$column]/@val
string(.)
列id-s的值类似于{col1, col2,…}
您的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()
将一个节点转换为字符串,并将空格规范化
解释—我在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>