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 文档。
目标
输出一个 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 文档。