我试图使用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>
我正在尝试使用RefTag值获得bbb attribure值:
<xsl:if test="$myVar/RefData[@RefTag = 'test3']/@bbb">
这不起作用。
VS XSL Debugger返回错误: “要在路径表达式中使用结果树片段,首先使用msxsl:node-set()函数将其转换为节点集。”
我不明白如何使用msxsl:node-set()函数,无论如何我不想使用msxsl namesapce。
有人可以帮忙吗?
答案 0 :(得分: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>
当对任何XML文档(未使用)应用上述转换时,生成所需结果:
false
请注意使用XSLT document()
函数,以便作为xml文档中的元素访问所需的<xsl:variable>
。
答案 1 :(得分:1)
<xsl:variable name="myVariable" select="msxsl:node-set($myVar)"/>
您可以通过将变量内容移动到源xml来避免msxsl命名空间。
答案 2 :(得分:-1)
假设这个XML:
<test1>
<RefData RefTag="test1"/>
<RefData RefTag="test2"/>
<RefData RefTag="test3"/>
<RefData RefTag="test4"/>
<RefData RefTag="test5"/>
<RefData RefTag="test6"/>
</test1>
这样的事情可行:
<xsl:template match="/">
<xsl:apply-templates select="test1/RefData"/>
</xsl:template>
<xsl:template match="RefData">
<xsl:variable name="myVar">
<xsl:choose>
<xsl:when test="@RefTag = 'test1'">false</xsl:when>
<xsl:when test="@RefTag = 'test2'">false</xsl:when>
<xsl:when test="@RefTag = 'test3'">false</xsl:when>
<xsl:when test="@RefTag = 'test4'">true</xsl:when>
<xsl:when test="@RefTag = 'test5'">false</xsl:when>
<xsl:when test="@RefTag = 'test6'">false</xsl:when>
<xsl:otherwise>true</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!--<text x="{$myVar}"/>-->
</xsl:template>