XSLT 结合 "params" 与 "match="@*|node()"

XSLT combine "params" with "match="@*|node()"

目标

输出一个 XML 具有确切的输入名称和变量作为 XML 我的 XSLT 从外部源接收 + 2 个参数

PSEUDOCODE - XSLT(1.0) 我使用的是变量而不是参数,因此更容易测试

  <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:variable name="StatusCode" select="'11111111111'">
    </xsl:variable>

    <xsl:variable name="StatusMessage" select="'########'">
    </xsl:variable>

<!-- BLOCK 1 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template> 
<!-- ------- -->

<!-- BLOCK 2 -->
    <xsl:template match="/">
        <StatusCode>
            <xsl:value-of select="$StatusCode"/>
        </StatusCode>
        <StatusMessage>
            <xsl:value-of select="$StatusMessage"/>
        </StatusMessage>
    </xsl:template> 
<!-- ------- -->

</xsl:stylesheet>

问题

如果我单独尝试 "BLOCK 1" 或 "BLOCK 2",它们可以工作,但我不能按需要将它们组合起来

首先应用您的 BLOCK 2 模板,因为它与根节点匹配。此模板不包含 xsl:apply-templates 说明 - 因此永远不会执行另一个模板。

问题是您希望添加的节点显示在何处。你可以这样做:

<!-- BLOCK 2 -->
    <xsl:template match="/">
        <xsl:apply-templates/>
        <StatusCode>
            <xsl:value-of select="$StatusCode"/>
        </StatusCode>
        <StatusMessage>
            <xsl:value-of select="$StatusMessage"/>
        </StatusMessage>
    </xsl:template> 
<!-- ------- -->

但这会将添加的节点放在根元素之外,使结果成为 XML 片段而不是格式良好的 XML 文档。