gpt4 book ai didi

xml - 如何将文本从一个 XML 文件复制到另一个

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

我有两个大的 XML 文件,其中第一个文件中的一些文本是错误的,需要用另一个 xml 文件中的文本替换。

xml 1 

<phrase name="1111"><![CDATA[aaaa]]></phrase>
<phrase name="2222"><![CDATA[bbbb]]></phrase>
<phrase name="3333"><![CDATA[cccc]]></phrase>
...

xml 2

<phrase name="1111"><![CDATA[dddd]]></phrase>
<phrase name="2222"><![CDATA[eeee]]></phrase>
<phrase name="4444"><![CDATA[ffff]]></phrase>
...

现在,同名元素中的文本应该被 xml 2 中的文本覆盖

output

<phrase name="1111"><![CDATA[dddd]]></phrase>
<phrase name="2222"><![CDATA[eeee]]></phrase>
<phrase name="3333"><![CDATA[cccc]]></phrase>
...

关于如何尽可能简单地做到这一点有什么想法吗?我已经尝试过使用 XSLT,但我是新手,它没有用,我需要它的方式。如果有任何程序可以处理此问题,则不需要使用 XSLT 来完成。

谢谢你的帮助

最佳答案

下面的变换

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output cdata-section-elements="phrase" />

<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
</xsl:template>

<xsl:template match="//phrase">
<xsl:variable name="name"><xsl:value-of select="@name" /></xsl:variable>
<xsl:copy><xsl:choose>
<xsl:when test="document('second.xml')//phrase[@name=$name]">
<xsl:apply-templates select="@*" />
<xsl:value-of select="document('second.xml')//phrase[@name=$name]" />
</xsl:when>
<xsl:otherwise><xsl:apply-templates select="@*|node()" /></xsl:otherwise>
</xsl:choose></xsl:copy>
</xsl:template>
</xsl:transform>

当应用于输入文件first.xml

<doc>
<phrase name="1111"><![CDATA[aaaa]]></phrase>
<phrase name="2222"><![CDATA[bbbb]]></phrase>
<phrase name="3333"><![CDATA[cccc]]></phrase>
</doc>

其中第二个输入文件second.xml的形式

<doc>
<phrase name="1111"><![CDATA[dddd]]></phrase>
<phrase name="2222"><![CDATA[eeee]]></phrase>
<phrase name="4444"><![CDATA[ffff]]></phrase>
</doc>

存在产生想要的结果

<doc>
<phrase name="1111"><![CDATA[dddd]]></phrase>
<phrase name="2222"><![CDATA[eeee]]></phrase>
<phrase name="3333"><![CDATA[cccc]]></phrase>
</doc>

关于xml - 如何将文本从一个 XML 文件复制到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20074245/

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