XSL:某些元素的转换必须按原样显示

XSL : Transform for some element remaining have to display as it is

我需要将公司代码合并到订单 number.I 需要 XSLT 来解决以下问题。 请帮我解决这个问题。

输入XML:

<?xml version='1.0' encoding='UTF-8'?>
<ImportOrders>
  <OrderInfo>
    <OrderNumber>98947</OrderNumber>
    <HeaderInfo>
      <CompanyCode>TEST</CompanyCode>
    </HeaderInfo>
  </OrderInfo>
  <OrderInfo>
    <OrderNumber>98949</OrderNumber>
    <HeaderInfo>
      <CompanyCode>GIM</CompanyCode>   
  </OrderInfo> 
</ImportOrders>

输出XML

<?xml version='1.0' encoding='UTF-8'?>
<ImportOrders>
  <OrderInfo>
    <OrderNumber>TEST-98947</OrderNumber>
    <HeaderInfo>
      <CompanyCode>TEST</CompanyCode>
    </HeaderInfo>
  </OrderInfo>
  <OrderInfo>
    <OrderNumber>GIM-98949</OrderNumber>
    <HeaderInfo>
      <CompanyCode>GIM</CompanyCode>   
  </OrderInfo> 
</ImportOrders>

这可以通过使用 identity transform 模式并为 OrderNumber 添加一个额外的模板来非常优雅地解决。

以下模板只是将输入逐字复制到输出:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/|@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

现在您添加模板 OrderNumber 选择值和相应的 CompanyCode

<xsl:template match="OrderNumber">
    <OrderNumer>
        <xsl:value-of select="../HeaderInfo/CompanyCode"/>-<xsl:value-of select="."/>
    </OrderNumer>
</xsl:template>

这是沙盒中的工作解决方案:https://codesandbox.io/s/stack-overflow-q-60811822-pdk2j

请注意,在您的示例中,第二个 OrderInfo 的结束 HeaderInfo 标记丢失了,我想这只是一个错字。