16

我正在尝试将多个 XML 文件合并到一个 XDocument 对象中。

XDocument 对象中不存在合并。我想念这个。

有没有人已经为 XDocument 实现了 Merge 扩展方法,或者类似的东西?

4

4 回答 4

27

我自己尝试了一下:

var MyDoc = XDocument.Load("File1.xml");
MyDoc.Root.Add(XDocument.Load("File2.xml").Root.Elements());

我不知道它是好是坏,但它对我来说很好:-)

于 2008-11-11T10:20:14.917 回答
3

务实,XDocumentvsXmLDocument不是全有或全无(除非你在 Silverlight 上) - 所以如果XmlDoucument做了你需要的东西,而XDocument不是,那么也许使用XmlDocument(with ImportNodeetc)。

也就是说,即使使用XDocument,您也可以使用XNode.ReadFrom来导入每个,然后将其简单地导入.Add主集合。

当然,如果文件很大,XmlReader/XmlWriter可能会更有效......但更复杂。幸运的是,XmlWriter有一个WriteNode接受 的方法XmlReader,因此您可以导航到 中的第一个孩子,XmlReader然后将其快速发送到输出文件。就像是:

    static void AppendChildren(this XmlWriter writer, string path)
    {
        using (XmlReader reader = XmlReader.Create(path))
        {
            reader.MoveToContent();
            int targetDepth = reader.Depth + 1;
            if(reader.Read()) {
                while (reader.Depth == targetDepth)
                {
                    writer.WriteNode(reader, true);
                }                
            }
        }
    }
于 2008-11-11T08:56:49.093 回答
3

将目录中的所有 xml 文件合并到一个 XDocument

public static XDocument MergeDir(string xmlDir)
{
    XDocument xdoc = XDocument.Parse("<root></root>");
    System.IO.DirectoryInfo directory = new DirectoryInfo(xmlDir);
    if (directory.Exists)
    {
        foreach (System.IO.FileInfo file in directory.GetFiles())
        {
            if (file.Extension == ".xml")
            {
                xdoc.Root.Add(XDocument.Load(file.FullName).Root.Elements());
            }
        }
    }

    return xdoc;
}
于 2015-01-12T17:39:16.730 回答
0

作为一种解决方法,您可以使用 XSL 文件来合并 XML 文件,然后将其转换为 XDocument 对象。

于 2008-11-11T08:20:10.180 回答