在C#中合并两个XML文件,其中一个是不符合的

Rik*_*son 2 .net c# 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>
Run Code Online (Sandbox Code Playgroud)

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

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);
}
Run Code Online (Sandbox Code Playgroud)

这会出现以下错误:

同一个表'参与者'不能是两个嵌套关系中的子表.

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

我需要的最终结果是一个XML文件,其中第一个XML文件的内容后跟第二个XML文件的内容,整个批次周围有一个标记,顶部有一个标题.

有任何想法吗?

谢谢,Rik

Dan*_*rth 6

在我看来,你提供的XML就好了.我建议你使用以下代码,根本不使用数据集类:

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));
Run Code Online (Sandbox Code Playgroud)

result 将包含一个XML文档,其中"Root"作为根标记,然后是文件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));
Run Code Online (Sandbox Code Playgroud)