gpt4 book ai didi

xslt - 合并 XML 节点

转载 作者:行者123 更新时间:2023-12-02 00:26:24 28 4
gpt4 key购买 nike

我有一个以下格式的源 xml:

 <xml>
<node>
<va-name>
<source area="RSC1985s5c1"/>
</va-name>
<body>
<div >
<heading>heading 1</heading>
</div>
</body>
</node>
<node>
<va-name>
<source area="RSC1985s5c2"/>
</va-name>
<body>
<div >
<heading>heading 2</heading>
</div>
</body>
</node>

<node>
<va-name>
<source area="RSC1985s5c1"/>
</va-name>
<body>
<div >
<heading>heading 3</heading>
</div>
</body>
</node>

<xml>

如果 xml/node/va-name/source[@area] 值在不同的 xml/node 之间相等,我想要的是合并节点。我必须仅复制 xml/node/body 并将它们合并到第一个节点中。

输出应该是:

 <xml>
<node>
<va-name>
<source area="RSC1985s5c1"/>
</va-name>
<body>
<div >
<heading> heading 1 </heading>
</div>
<div >
<heading> heading 3 </heading>
</div>
</body>
</node>
<node>
<va-name>
<source area="RSC1985s5c2"/>
</va-name>
<body>
<div >
<heading>heading 2</heading>
</div>
</body>
</node>
</xml>

在上面的输出中,节点 1 和节点 3 具有相同的 xml/node/va-name/source[@area],这就是为什么在输出中我将两者组合起来,节点 2 将按原样输出。如果我有更多节点,并且其中任何一个与节点 2 匹配 (xml/node/va-name/source[@area]),那么我们会将其合并到节点 2,依此类推...

如果我能得到任何帮助,请感激...

最佳答案

XSLT 2.0 中非常简单的分组解决方案:

<xsl:template match="xml">
<xml>
<xsl:for-each-group select="node" group-by="va-name/source/@area">
<node>
<xsl:copy-of select="va-name"/>
<body>
<xsl:copy-of select="current-group()/body/*"/>
</body>
</node>
</xsl:for-each-group>
</xml>
</xsl:template>

关于xslt - 合并 XML 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7987215/

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