从xsl变量获取xpath

Sch*_*ser 5 xslt xpath

我试图使用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.

有人可以帮忙吗?

Dim*_*hev 8

一个不需要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文档中的元素访问所需的内容.