提问人:Eric Smith 提问时间:10/30/2023 更新时间:10/30/2023 访问量:29
使用 XSLT 2.0 的 Restucture XML 层次结构
Restucture XML Hierarchy with XSLT 2.0
问:
在 isaPartner 下有一个结构为 Transaction/isaPartners/Partner/Header/Item 的 XML 文件,其中包含多个合作伙伴。
<?xml version="1.0" encoding="UTF-8"?>
<Transactions>
<isaPartners>
<Partner partnerId="PartnerA">
<Header currencyCode="USD" dateCreated="10/17/23" invoiceNumber="12345">
<Item uom="EA" price="1.20" item="99987" />
</Header>
</Partner>
<Partner partnerId="PartnerB">
<Header currencyCode="USD" dateCreated="10/17/23" invoiceNumber="98765">
<Item uom="EA" price="5.60" item="7765" />
</Header>
</Partner>
<Partner partnerId="PartnerC" >
<Header currencyCode="USD" dateCreated="10/17/23" invoiceNumber="45678">
<Item uom="EA" price="6.50" item="1123" />
</Header>
</Partner>
</isaPartners>
</Transactions>
我正在尝试获取所有 Header/Item 实例,并将其放在一个我可以命名的 Partner/@partnerId 下。
输出应为: 在这种情况下,我会将所有标题/项目放在一个 Partner/@partnerID = PartnerD 下
<?xml version="1.0" encoding="UTF-8"?>
<Transactions>
<isaPartners>
<Partner partnerId="PartnerD">
<Header currencyCode="USD" dateCreated="10/17/23" invoiceNumber="12345">
<Item uom="EA" price="1.20" item="99987" />
</Header>
<Header currencyCode="USD" dateCreated="10/17/23" invoiceNumber="98765">
<Item uom="EA" price="5.60" item="7765" />
</Header>
<Header currencyCode="USD" dateCreated="10/17/23" invoiceNumber="45678">
<Item uom="EA" price="6.50" item="1123" />
</Header>
</Partner>
</isaPartners>
</Transactions>
我不确定从哪里开始,所以我没有我尝试过的例子。我熟悉如何在 XML 的结构中操作 XML 元素,但我不知道如何以这种方式对结构进行重新排序。提前感谢您的任何帮助!!
答:
2赞
Siebe Jongebloed
10/30/2023
#1
这是 xslt 中非常基本的任务,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<!-- Matches and copies all -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- Matches and copies isaPartners and creates a new Partner and applies in that new Partner all Partner/Header -->
<xsl:template match="isaPartners">
<xsl:copy>
<Partner partnerId="PartnerD">
<xsl:apply-templates select="Partner/Header"/>
</Partner>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
评论
0赞
Eric Smith
10/30/2023
嗨,Siebe:这效果很好!我很惊讶这是一个如此简单的修复。我需要更好地了解模板和元素是如何操作的,尤其是使用复制标签。
评论