将所有模板应用于全局变量而不是源
Applying all templates to a global variable instead of source
我使用全局变量从源中捕获一组节点 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>
样式表中的名称space exsl
需要声明为 xmlns:exsl="http://exslt.org/common"
然后您可以在第二步中处理变量的结果并删除白色 space.
我使用全局变量从源中捕获一组节点 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>
样式表中的名称space exsl
需要声明为 xmlns:exsl="http://exslt.org/common"
然后您可以在第二步中处理变量的结果并删除白色 space.