Xml XSLT具有相同匹配项的多个模板

Xml XSLT具有相同匹配项的多个模板,xml,xslt,transformation,Xml,Xslt,Transformation,我目前一直在为一个元素应用多个具有相同匹配项的xsl:template。下面的示例显示了问题 有人知道使用两个模板匹配创建预期输出的XSL模板吗?由于技术原因,无法将两个模板元素放在一起 输入 XSLT 输出: <root> <elem>123,4500</elem> <elem>789,1200</elem> </root> 预期产出: <root> <renamed>12

我目前一直在为一个元素应用多个具有相同匹配项的xsl:template。下面的示例显示了问题

有人知道使用两个模板匹配创建预期输出的XSL模板吗?由于技术原因,无法将两个模板元素放在一起

输入

XSLT

输出:

<root>
    <elem>123,4500</elem>
    <elem>789,1200</elem>
</root>
预期产出:

<root>
    <renamed>123,4500</renamed>
    <renamed>789,1200</renamed>
</root>

谢谢

通常,您会使用模式处理具有不同模板的同一节点。我认为在你的情况下你不需要。如果应用此XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:decimal-format name="de" decimal-separator="," grouping-separator="."/>


<xsl:template match="/">
    <root>
    <xsl:apply-templates />
    </root>
</xsl:template>

<xsl:template match="/root/elem">
    <xsl:element name="renamed">
        <xsl:value-of select="format-number(.,'#.##0,0000','de')" />
    </xsl:element>
</xsl:template>

</xsl:stylesheet>
到您的源XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
 <elem>123.45</elem>
 <elem>789.12</elem>
</root>
您将获得以下输出:

<?xml version="1.0" encoding="UTF-8"?>
<root>
 <renamed>123,4500</renamed>
 <renamed>789,1200</renamed>
</root>
致以最良好的祝愿,
Peter

通常,您会使用模式处理具有不同模板的同一节点。我认为在你的情况下你不需要。如果应用此XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:decimal-format name="de" decimal-separator="," grouping-separator="."/>


<xsl:template match="/">
    <root>
    <xsl:apply-templates />
    </root>
</xsl:template>

<xsl:template match="/root/elem">
    <xsl:element name="renamed">
        <xsl:value-of select="format-number(.,'#.##0,0000','de')" />
    </xsl:element>
</xsl:template>

</xsl:stylesheet>
到您的源XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
 <elem>123.45</elem>
 <elem>789.12</elem>
</root>
您将获得以下输出:

<?xml version="1.0" encoding="UTF-8"?>
<root>
 <renamed>123,4500</renamed>
 <renamed>789,1200</renamed>
</root>
致以最良好的祝愿,
Peter

根据XSLT规范,两个具有相同优先级的模板匹配同一节点是一个错误,并且:

如果[processor]没有发出错误信号,它必须通过从剩下的匹配模板规则中选择样式表中最后出现的规则来恢复

这就是第二个模板获胜的原因

如果你想把数字格式化作为可重用的组件,我会考虑命名模板


根据XSLT规范,两个优先级相同的模板匹配同一节点是错误的,并且:

如果[processor]没有发出错误信号,它必须通过从剩下的匹配模板规则中选择样式表中最后出现的规则来恢复

这就是第二个模板获胜的原因

如果你想把数字格式化作为可重用的组件,我会考虑命名模板


您的解决方案确实使用了一个模板元素。我需要一个为/root/elem使用两个模板元素的模板:一个使用数字格式,另一个重命名元素。那么,如果你只需要一个模板就可以实现所有目标,为什么还要使用两个模板呢??向你问好,彼得。PS:您可以尝试使用Modes。您的解决方案确实使用了一个模板元素。我需要一个为/root/elem使用两个模板元素的模板:一个使用数字格式,另一个重命名元素。那么,如果你只需要一个模板就可以实现所有目标,为什么还要使用两个模板呢??向你问好,彼得。PS:你可以试着玩模式