(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"/>
在XSLT 1.0中,在您的示例中定义的变量称为结果树片段(RTF),您只能使用xsl:copy-of
将整个片段复制到结果树中,或者使用xsl:value-of
复制整个内容。示例
<xsl:copy-of select="$LANG"/>
如果你想把变量当作一个临时树,你需要node-set()
扩展。
document()
函数来检索所需的值。
注意如果您正在使用Saxon (v>6.5),您可以简单地将样式表版本设置为1.1,并且您将能够在没有任何节点集扩展的情况下管理RTF。
(XSLT 1.0)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:empo="http://stackoverflow.com/users/253811/empo">
<empo:LANG>
<empo:foo>
<empo:bar>Hello</empo:bar>
</empo:foo>
</empo:LANG>
<xsl:template match="/">
<xsl:variable name="LANG" select="document('')/*/empo:LANG"/>
<xsl:value-of select="$LANG/empo:foo/empo:bar"/>
</xsl:template>
</xsl:stylesheet>