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

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

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

有帮助吗?

解决方案

我自己尝试了一下:

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

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

其他提示

务实, XDocument vs XmLDocument 不是全有或全无(除非你在Silverlight上) - 所以如果 XmlDoucument 那么你需要的东西, XDocument 没有,然后可能使用 XmlDocument (带 ImportNode 等)。

那就是说,即使使用 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);
                }                
            }
        }
    }

将所有xml文件从dir合并到一个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;
}

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top