首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML -使用XSLT合并同一节点多次出现的子元素

XML -使用XSLT合并同一节点多次出现的子元素
EN

Stack Overflow用户
提问于 2021-12-02 05:28:30
回答 1查看 33关注 0票数 0

我有以下由外部系统发送的源文件。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<root>
  <remoteId>id-sent-by-sender</remoteId>
  <payments>
    <payment>
      <amount>383700</amount>
      <remoteId>unique-id-1</remoteId>
      <beneficiary>
        <accountNumber>CustomerAccount_1</accountNumber>
        <country>fr</country>
        <routingNumber>AAABBBBCCC</routingNumber>
        <title>Dale's Shop</title>
        <email>dale@shop.com</email>
      </beneficiary>
      <feeBearer>
        <party>supplier</party>
        <supplierFeePercent>1.00</supplierFeePercent>
      </feeBearer>
      <currency>eur</currency>
      <dateDue>2021-07-21</dateDue>
      <metaData>
        <data>
          <key>a-key</key>
          <value>a value</value>
        </data>
        <data>
          <key>another-key</key>
          <value>another value</value>
        </data>
      </metaData>
      <reference>
        <row>invoice row 1</row>
      </reference>
      <reference>
        <row>invoice row 2</row>
      </reference>
      <reference>
        <row>invoice row 3</row>
      </reference>
    </payment>
    <payment>
      <amount>100000</amount>
      <remoteId>unique-id-2</remoteId>
      <beneficiary>
        <accountNumber>CustomerAccount_2</accountNumber>
        <country>gb</country>
        <routingNumber>BBBKKKKSSS</routingNumber>
        <title>Ramos Tacos</title>
      </beneficiary>
      <feeBearer>
        <party>supplier</party>
        <supplierFeePercent>1.00</supplierFeePercent>
      </feeBearer>
      <currency>eur</currency>
      <reference>
        <row>invoice row 1</row>
      </reference>
      <reference>
        <row>invoice row 2</row>
      </reference>
      <reference>
        <row>invoice row 3</row>
      </reference>
    </payment>
  </payments>
</root>

我需要将该文件更改为类似下面的内容。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<root>
  <remoteId>id-send-by-sender</remoteId>
  <payments>
    <payment>
      <amount>383700</amount>
      <remoteId>unique-id-1</remoteId>
      <beneficiary>
        <accountNumber>CustomerAccount_1</accountNumber>
        <country>fr</country>
        <routingNumber>AAABBBBCCC</routingNumber>
        <title>Dale's Shop</title>
        <email>dale@shop.com</email>
      </beneficiary>
      <feeBearer>
        <party>supplier</party>
        <supplierFeePercent>1.00</supplierFeePercent>
      </feeBearer>
      <currency>eur</currency>
      <dateDue>2021-07-21</dateDue>
      <metaData>
        <data>
          <key>a-key</key>
          <value>a value</value>
        </data>
        <data>
          <key>another-key</key>
          <value>another value</value>
        </data>
      </metaData>
      <reference>
        <row>invoice row 1</row>
        <row>invoice row 2</row>
        <row>invoice row 3</row>
      </reference>
    </payment>
    <payment>
      <amount>100000</amount>
      <beneficiary>
        <accountNumber>CustomerAccount_2</accountNumber>
        <country>gb</country>
        <routingNumber>BBBKKKKSSS</routingNumber>
        <title>Ramos Tacos</title>
      </beneficiary>
      <feeBearer>
        <party>supplier</party>
        <supplierFeePercent>1.00</supplierFeePercent>
      </feeBearer>
      <currency>eur</currency>
      <reference>
        <row>invoice row 1</row>
        <row>invoice row 2</row>
        <row>invoice row 3</row>
      </reference>
      <remoteId>unique-id-2</remoteId>
    </payment>
  </payments>
</root>

简而言之,这两个XML之间的区别在于,第一个XML有多个元素<reference>,我需要将这些元素合并到一个出现项中,同时保持所有这些出现项的子元素不变。

使用XSLT可以做到这一点吗?如果是的话,有没有人可以帮忙呢?我在这方面是个新手,虽然我搜索了所有的帖子,但我不知道该怎么去做。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-12-02 09:03:14

我希望看到一个包含标准身份模板和规则的样式表:

代码语言:javascript
复制
<xsl:template match="payment">
  <xsl:copy>
    <xsl:apply-templates/>
    <reference>
      <xsl:copy-of select="reference/row"/>
    </reference>
  </xsl:copy>
</xsl:template>

<xsl:template match="reference"/>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70194582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档