c# - 在 C# 中合并两个 XML 文件,其中一个不一致

标签 c# .net xml dataset

我有两个 XML 文件需要合并到一个文件中。当我尝试合并它们时,我收到一条错误消息,指出其中一个不符合。

有问题的 XML 文件看起来像这样:

<letter>
    <to>
        <participant>
            <name>Joe Bethersonton</name>
            <PostalAddress>Apartment 23R, 11454 Pruter Street</PostalAddress>
            <Town>Fargo, North Dakota, USA</Town>
            <ZipCode>50504</ZipCode>
        </participant>
    </to>
    <from>
        <participant>
            <name>Jon Doe</name>
            <PostalAddress>52 Generic Street</PostalAddress>
            <Town>Romford, Essex, UK</Town>
            <ZipCode>RM11 2TH</ZipCode>
        </participant>
    </from>
</letter>

我正在尝试使用以下代码片段合并这两个文件:

try
{
    Dataset ds = new DataSet();
    Dataset ds2 = new DataSet();
    XmlTextReader reader1 = new XmlTextReader("C:\\File1.xml");
    XmlTextReader reader2 = new XmlTextReader("C:\\File2.xml");
    ds.ReadXml(reader1);
    ds2.ReadXml(reader2);
    ds.Merge(ds2);
}
catch(System.Exception ex)
{
    Console.WriteLine(ex.Message);
}

这会产生以下错误:

同一个表'participant'不能是两个嵌套关系中的子表。

这两个 XML 文件都是以 UTF-16 编码的,这使得通过简单的文本读写来组合它们变得困难。

我需要的最终结果是一个 XML 文件,其中包含第一个 XML 文件的内容,然后是第二个 XML 文件的内容,整个文件周围有一个和标记,顶部有一个标题。

有什么想法吗?

谢谢, 瑞克

最佳答案

在我看来,您提供的 XML 很好。我建议,您使用以下代码并且根本不要使用 Dataset 类:

XDocument doc1 = XDocument.Load("C:\\File1.xml");
XDocument doc2 = XDocument.Load("C:\\File2.xml");
var result = new XDocument(new XElement("Root", doc1.Root, doc2.Root));

result 将包含一个以“Root”作为根标记的 XML 文档,然后是文件 1 的内容,然后是文件 2 的内容。

更新:
如果需要使用XmlDocument,可以使用这段代码:

XmlDocument doc1 = new XmlDocument();
XmlDocument doc2 = new XmlDocument();
doc1.Load("C:\\File1.xml");
doc2.Load("C:\\File2.xml");
XmlDocument result = new XmlDocument();
result.AppendChild(result.CreateElement("Root"));
result.DocumentElement.AppendChild(result.ImportNode(doc1.DocumentElement, true));
result.DocumentElement.AppendChild(result.ImportNode(doc2.DocumentElement, true));

关于c# - 在 C# 中合并两个 XML 文件,其中一个不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5540862/

相关文章:

c# - 将嵌入式资源读入字节数组时出错 (C#)

java - 从可更改的 TextView 获取整数以在倒计时器中使用

c# - 我怎么弄错了我的DataContext?

c# - MS 测试断言检查

.net - 如何将 MS Windows 操作系统版本号转换为 .NET 中的产品名称?

xml - 使用 XPath 查找电子邮件地址

xml - Ant XMLTASK 插入一个节点(如果它不存在)

c# - 大智能 ViewModels、愚蠢的 Views 和任何模型,最好的 MVVM 方法?

c# - 在 C# 中解析日期时间,得到错误的输出

c# - 您如何对 ASP.NET Core Web 应用程序(.Net Framework)进行单元测试?