自动化exslt:node-set?

时间:2011-07-26 23:09:57

标签: xslt xslt-1.0

不确定这是否可行,但尝试设置一些不会让我在从动态创建的节点块中提取值时键入exslt:node-set的内容。我将整个节点集存储在变量中,并将其包装在exslt:node-set中,但是当我尝试从中拉出它时,为什么它不起作用。这可能吗?

<xsl:variable name="LANG">
    <xsl:variable name="tmp">
        <xsl:element name="foo">
            <xsl:element name="bar">Hello</xsl:element>
        </xsl:element>
    </xsl:variable>
    <xsl:value-of select="exslt:node-set($tmp)"/>
</xsl:variable>


<!-- Love to be able to do this --> 
<xsl:value-of select="$LANG/foo/bar"/>

<!-- This does work --> 
<xsl:value-of select="exslt:node-set($LANG)/foo/bar"/>

1 个答案:

答案 0 :(得分:2)

在XSLT 1.0中,您的示例中定义的变量称为结果树片段(RTF),您只能使用xsl:copy-of整个片段复制到结果树或{ {1}}复制整个内容。实施例

xsl:value-of

如果您想将变量视为临时树,则需要 <xsl:copy-of select="$LANG"/> 扩展名。

在XSLT 1.0中处理静态树片段(如查找表)的常用方法是将它们定义为样式表根元素的子元素(使用自定义命名空间)。然后,您可以使用node-set()函数来检索所需的值。

注意如果您使用的是Saxon(v&gt; 6.5),只需将样式表版本设置为 1.1 ,即可在没有任何节点的情况下管理RTF -set extension。


[XSLT 1.0]

document()