XSLT 1.0中如何对变量内字面指定节点应用模板?
解决XSLT 1.0中结果树片段转节点列表及DSL展开问题
方法一:用EXSLT扩展函数转换结果树片段
XSLT 1.0里,多数主流处理器(比如xsltproc依赖的libxslt)支持EXSLT的exsl:node-set()函数,可直接将结果树片段转为节点列表。操作步骤如下:
- 在XSLT根元素中声明EXSLT命名空间:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl">
- 转换变量后再应用模板:
<xsl:variable name="tmp"> <xsl:text>hi: </xsl:text> <myelm /> </xsl:variable> <xsl:apply-templates select="exsl:node-set($tmp)/node()" />
这样就能正常触发你编写的<myelm />匹配模板,输出hi: MYELM。
方法二:绕开结果树片段,直接通过模板逻辑实现
如果不想依赖扩展函数,可调整实现逻辑,避免用变量存储混合内容:
- 直接在模板中编写输出逻辑,把静态文本和待处理节点放在模板内,而非变量中:
<xsl:template name="generate-dsl-content"> <xsl:text>hi: </xsl:text> <xsl:apply-templates select="document('')//myelm" /> </xsl:template>
若<myelm />是动态生成的,也可通过模板参数传递节点,避开结果树片段的限制。
内容的提问来源于stack exchange,提问作者Jason Siefken
相关产品推荐
相关产品推荐

