我使用全局变量从源XML捕获一组节点。对于源 XML 中的每个节点,我需要检查该节点是否存在于变量中。这可能吗?
另一种选择是将所有模板应用于全局变量而不是源 XML。但我也不知道这是否可能。
给出以下答案。如果我尝试将模板应用于全局变量,我会得到以下代码,但它不起作用。如何将变量传递给其余模板,并且仍然具有适当的匹配项?
<xsl:variable name="transformation_result">
<ABC>
<xsl:copy-of select="/ABC/Data"/>
</ADT>
</xsl:variable>
<xsl:template match="/">
<xsl:apply-templates select="$transformation_result"/>
</xsl:template>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template name="remove_whitespace" match="text()">
<xsl:value-of select="normalize-space()"/>
</xsl:template>
如果您使用
<xsl:template match="/">
<xsl:apply-templates select="exsl:node-set($var)/node()" mode="m2"/>
</xsl:template>
和
<xsl:template match="@* | node()" mode="m2">
<xsl:copy>
<xsl:apply-templates select="@* | node()" mode="m2"/>
</xsl:copy>
</xsl:template>
<xsl:template name="remove_whitespace" match="text()" mode="m2">
<xsl:value-of select="normalize-space()"/>
</xsl:template>
如果样式表中的命名空间exsl
需要声明为 xmlns:exsl="http://exslt.org/common"
,则可以在第二步中处理变量的结果并删除空格。