基本上,我试图将存储在变量中的节点的节点名称写入文件。我的问题是,当我通过 select 属性分配变量的值时,它会起作用,而通过内容分配时则不起作用。不过我确实需要让后者工作,因为我希望该内容是有条件的(下面的示例中不是这样)。
有人能帮我解决这个问题吗?谢谢!
我的环境是一个专有软件平台,用于发布可变数据,使用 Altova 的某个东西(引擎这个词正确吗?)来处理 xslt。我在 xslt 2.0 模式下使用此引擎。
这一切都发生在这个命名模板中:
<xsl:template name="setValidatedEmail">
<xsl:param name="docType"/>
<xsl:variable name="break" select="' '"/>
<xsl:variable name="contEm1" select="."/>
<xsl:variable name="contEm2">
<xsl:copy-of select="."/>
</xsl:variable>
<validatedEmail>
<xsl:result-document ...">
<xsl:value-of select="local-name-from-QName(node-name($contEm1))"/>
<xsl:value-of select="$break"/>
<xsl:value-of select="local-name-from-QName(node-name($contEm2))"/>
</xsl:result-document>
</validatedEmail>
</xsl:template>
其调用方式如下:
<xsl:template match="email">
<xsl:call-template name="setValidatedEmail">
<xsl:with-param name="docType">Stockbooks</xsl:with-param>
</xsl:call-template>
</xsl:template>
local-name-from-QName(node-name($contEm1))
返回字符串email
(如预期的那样),但local-name-from-QName(node-name($contEm2))
意外地不返回任何内容。
您的代码
创建一个变量,其值是一个包含上下文节点或项的副本的新文档节点
.
。您可以使用
as
属性来更改它或者(没有这样的
as
属性)您需要选择树中的元素,例如$contEm2/*
选择里面的元素。至于使用
select
属性但进行条件检查,XPath 2 及更高版本有一个if (conditional-expression) then sequence1 else sequence2
表达式。