gpt4 book ai didi

xml使用xsl合并两个文件?

转载 作者:数据小太阳 更新时间:2023-10-29 02:55:05 27 4
gpt4 key购买 nike

我需要合并两个相似的 xml 文件,但只合并在公共(public)标签上匹配的记录,例如<type>在以下示例中:

file1.xml 是

<node>
<type>a</type>
<name>joe</name>
</node>
<node>
<type>b</type>
<name>sam</name>
</node>

file2.xml 是

<node>
<type>a</type>
<name>jill</name>
</node>

这样我就有了输出

<node>
<type>a</type>
<name>jill</name>
<name>joe</name>
</node>
<node>
<type>b</type>
<name>sam</name>
</node>

在 xsl 中执行此操作的基础是什么?非常感谢。

最佳答案

这个样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="kElementByType" match="*[not(self::type)]" use="../type"/>
<xsl:param name="pSource2" select="'file2.xml'"/>
<xsl:variable name="vSource2" select="document($pSource2,/)"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="type">
<xsl:variable name="vCurrent" select="."/>
<xsl:call-template name="identity"/>
<xsl:for-each select="$vSource2">
<xsl:apply-templates select="key('kElementByType',$vCurrent)"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

有了这个输入(格式良好):

<root>
<node>
<type>a</type>
<name>joe</name>
</node>
<node>
<type>b</type>
<name>sam</name>
</node>
</root>

输出:

<root>
<node>
<type>a</type>
<name>jill</name>
<name>joe</name>
</node>
<node>
<type>b</type>
<name>sam</name>
</node>
</root>

关于xml使用xsl合并两个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4402102/

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