我试图使用xsl ver 1.0从xsl变量获取一些xpath.那是我的变量:
<xsl:variable name ="myVar">
<RefData RefTag="test1" bbb="false" />
<RefData RefTag="test2" bbb="false" />
<RefData RefTag="test3" bbb="false" />
<RefData RefTag="test4" bbb="true" />
<RefData RefTag="test5" bbb="false" />
<RefData RefTag="test6" bbb="false" />
</xsl:variable>
Run Code Online (Sandbox Code Playgroud)
我试图使用RefTag值获得bbb attribure值:
<xsl:if test="$myVar/RefData[@RefTag = 'test3']/@bbb">
Run Code Online (Sandbox Code Playgroud)
这不起作用.
VS XSL调试器返回错误:"要在路径表达式中使用结果树片段,首先使用msxsl:node-set()函数将其转换为节点集."
我不明白如何使用msxsl:node-set()函数,无论如何我不想使用msxsl namesapce.
有人可以帮忙吗?
一个不需要xxx:node-set()扩展的解决方案如下:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<!-- -->
<xsl:variable name ="myVar">
<RefData RefTag="test1" bbb="false" />
<RefData RefTag="test2" bbb="false" />
<RefData RefTag="test3" bbb="false" />
<RefData RefTag="test4" bbb="true" />
<RefData RefTag="test5" bbb="false" />
<RefData RefTag="test6" bbb="false" />
</xsl:variable>
<!-- -->
<xsl:variable name="vrefVar" select=
"document('')/*/xsl:variable[@name='myVar']"
/>
<!-- -->
<xsl:template match="/">
<xsl:value-of select="$vrefVar/*[@RefTag='test3']/@bbb"/>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
当上述转换应用于任何XML文档(未使用)时,将生成所需的结果:
false
请注意使用XSLT document()函数,以便<xsl:variable>仅仅作为xml文档中的元素访问所需的内容.