gpt4 book ai didi

xml - 如何使用 xslt 基于唯一字段将重复的 xml 元素合并到单个 xml 元素中

转载 作者:行者123 更新时间:2023-12-03 17:31:59 24 4
gpt4 key购买 nike

我有一个场景,我需要基于唯一字段将 XML 元素合并到单个根元素中。

要求:

     <?xml version = "1.0" encoding = "UTF-8"?>
<ns0:klanten xmlns:ns0 = "http://integratie.com/typen/klant/klantmvs/1.0">
<ns0:klant xmlns:ns0 = "http://integratie.com/typen/klant/klantmvs/1.0">
<ns0:klantId MVS = "36301586">36301586</ns0:klantId>
<ns0:accounts>
<ns0:account>
<ns0:accountVolgnummer>3</ns0:accountVolgnummer>
<ns0:betaalwijze>AGI</ns0:betaalwijze>
<ns0:classificatie>B2C</ns0:classificatie>
<ns0:gewensteNotaMedium>VZD</ns0:gewensteNotaMedium>
<ns0:bankrekening>
<ns0:bankrekeningnummer>BNGH0285108743</ns0:bankrekeningnummer>
<ns0:bankrekeninghouder/>
<ns0:bankrekeningland/>
<ns0:financieleInstelling/>
<ns0:standaardrekeningIndicator>true</ns0:standaardrekeningIndicator>
</ns0:bankrekening>
<ns0:startdatum>2014-06-05</ns0:startdatum>
<ns0:einddatum>2014-07-25</ns0:einddatum>
</ns0:account>
</ns0:accounts>
</ns0:klant>
<ns0:klant xmlns:ns0 = "http://integratie.com/typen/klant/klantmvs/1.0">
<ns0:klantId MVS = "36301586">36301586</ns0:klantId>
<ns0:accounts>
<ns0:account>
<ns0:accountVolgnummer>464</ns0:accountVolgnummer>
<ns0:betaalwijze>AGI</ns0:betaalwijze>
<ns0:classificatie>B2C</ns0:classificatie>
<ns0:gewensteNotaMedium>VZD</ns0:gewensteNotaMedium>
<ns0:bankrekening>
<ns0:bankrekeningnummer>BNGH0285108743</ns0:bankrekeningnummer>
<ns0:bankrekeninghouder/>
<ns0:bankrekeningland/>
<ns0:financieleInstelling/>
<ns0:standaardrekeningIndicator>true</ns0:standaardrekeningIndicator>
</ns0:bankrekening>
<ns0:startdatum>2014-12-12</ns0:startdatum>
<ns0:einddatum>2015-03-09</ns0:einddatum>
</ns0:account>
</ns0:accounts>
</ns0:klant>
</ns0:klanten>

期望输出:
<?xml version = "1.0" encoding = "UTF-8"?>
<ns0:klanten xmlns:ns0 = "http://integratie.com/typen/klant/klantmvs/1.0">
<ns0:klant xmlns:ns0 = "http://integratie.com/typen/klant/klantmvs/1.0">
<ns0:klantId MVS = "36301586">36301586</ns0:klantId>
<ns0:accounts>
<ns0:account>
<ns0:accountVolgnummer>464</ns0:accountVolgnummer>
<ns0:betaalwijze>AGI</ns0:betaalwijze>
<ns0:classificatie>B2C</ns0:classificatie>
<ns0:gewensteNotaMedium>VZD</ns0:gewensteNotaMedium>
<ns0:bankrekening>
<ns0:bankrekeningnummer>BNGH0285108743</ns0:bankrekeningnummer>
<ns0:bankrekeninghouder/>
<ns0:bankrekeningland/>
<ns0:financieleInstelling/>
<ns0:standaardrekeningIndicator>true</ns0:standaardrekeningIndicator>
</ns0:bankrekening>
<ns0:startdatum>2014-12-12</ns0:startdatum>
<ns0:einddatum>2015-03-09</ns0:einddatum>
</ns0:account>
<ns0:account>
<ns0:accountVolgnummer>3</ns0:accountVolgnummer>
<ns0:betaalwijze>AGI</ns0:betaalwijze>
<ns0:classificatie>B2C</ns0:classificatie>
<ns0:gewensteNotaMedium>VZD</ns0:gewensteNotaMedium>
<ns0:bankrekening>
<ns0:bankrekeningnummer>BNGH0285108743</ns0:bankrekeningnummer>
<ns0:bankrekeninghouder/>
<ns0:bankrekeningland/>
<ns0:financieleInstelling/>
<ns0:standaardrekeningIndicator>true</ns0:standaardrekeningIndicator>
</ns0:bankrekening>
<ns0:startdatum>2014-06-05</ns0:startdatum>
<ns0:einddatum>2014-07-25</ns0:einddatum>
</ns0:account>
</ns0:accounts>
</ns0:klant>
</ns0:klanten>

我正在尝试在 tibco 中实现这一点,但没有成功。任何人都可以帮我写 xslt 吗?

最佳答案

您可以尝试这样的操作:使用 key 获取不同的 ID,并使用这些不同的 ID 遍历 klantId节点。选择他们的帐户数据。

我确信周围有人可以用一半的行来解决这个问题,但它似乎准备了你需要的东西:

在这里测试:http://www.utilities-online.info/xsltransformation/#.VlzGqNgveUl

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"
version="1.0" xmlns:ns0="http://integratie.com/typen/klant/klantmvs/1.0">
<xsl:output encoding="UTF-8" indent="yes" method="xml" standalone="no" omit-xml-declaration="no" />

<xsl:key name="IDs" match="/ns0:klanten/ns0:klant/ns0:klantId" use="@MVS" />

<xsl:template match="/">
<ns0:klanten>
<xsl:for-each select="//ns0:klantId[generate-id()=generate-id(key('IDs',.)[1])]">
<xsl:variable name="currentId" select="." />
<ns0:klant>
<ns0:klantid mvs="{$currentId}">
<xsl:value-of select="$currentId" />
</ns0:klantid>
<ns0:accounts>
<xsl:for-each select="//ns0:klantId[@MVS=$currentId]">
<xsl:copy-of select="../ns0:accounts/ns0:account" />
</xsl:for-each>
</ns0:accounts>
</ns0:klant>
</xsl:for-each>
</ns0:klanten>
</xsl:template>
</xsl:stylesheet>

关于xml - 如何使用 xslt 基于唯一字段将重复的 xml 元素合并到单个 xml 元素中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34002715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com