这是我的问题。我有 2 个具有相同结构的 xml 文件,与第一个相比,第二个 xml 只包含几个节点。
文件1
<root>
<alpha>111</alpha>
<beta>22</beta>
<gamma></gamma>
<delta></delta>
</root>
文件2
<root>
<beta>XX</beta>
<delta>XX</delta>
</root>
结果应该是这样的
<root>
<alpha>111</alpha>
<beta>22</beta>
<gamma></gamma>
<delta>XX</delta>
</root>
基本上,如果 File1 中任何节点的节点内容为空,那么它应该从 File2 中读取值(如果存在,即)。
我确实尝试了 Microsoft XmlDiff API 的运气,但它对我没有用(补丁过程没有应用对源文档的更改)。另外我有点担心它使用的 DOM 方法,因为我将要处理的 xml 的大小。 你能建议一个这样做的好方法吗? 我正在使用 C# 2
最佳答案
这是 Alastair 提出的更简单、更有效的解决方案(请参阅我对他的解决方案的评论)。
这个转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:variable name="vFile2" select="document('File2.xml')"/> <xsl:template match="*"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:copy> </xsl:template> <xsl:template match="*[not(text())]"> <xsl:copy> <xsl:copy-of select="$vFile2/*/*[name() = name(current())]/text()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
应用于此 XML 文档时:
<root> <alpha>111</alpha> <beta>22</beta> <gamma></gamma> <delta></delta> </root>
产生想要的结果:
<root> <alpha>111</alpha> <beta>22</beta> <gamma></gamma> <delta>XX</delta> </root>
关于c# - 比较 2 个 XML 文档并将更改应用到源文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/326960/