Unire file XML in un XDocument

Sto cercando di unire più file XML in un unico oggetto XDocument.

Unione non esiste in oggetto XDocument. Mi manca questo.

Qualcuno ha già implementato un Merge metodo di estensione per XDocument, o qualcosa di simile ?

InformationsquelleAutor Larry | 2008-11-11



4 Replies
  1. 25

    Ho provato un po ‘ di me :

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

    Non so se sia un bene o un male, ma funziona benissimo per me 🙂

  2. 3

    Di essere pragmatici, XDocument vs XmLDocument non è o tutto o niente (a meno che non siete su Silverlight) – quindi se XmlDoucument fa qualcosa di cui avete bisogno, e XDocument non, quindi forse XmlDocument (con ImportNode ecc).

    Che ha detto, anche con XDocument, si potrebbe presumibilmente utilizzare XNode.ReadFrom per importare, quindi semplicemente .Add alla collezione principale.

    Naturalmente, se i file sono grandi, XmlReader/XmlWriter potrebbe essere più efficiente… ma più complesso. Fortunatamente, XmlWriter ha un WriteNode metodo che accetta un XmlReader, quindi è possibile navigare per il primo figlio in XmlReader e poi basta blitz per il file di output. Qualcosa come:

        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);
                    }                
                }
            }
        }
    • Grazie mille 🙂 penso di aver trovato qualcosa che funziona con meno codice.
  3. 3

    Unire tutti i file xml da dir a uno 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;
    }
  4. 0

    Come soluzione alternativa, è possibile utilizzare un file XSL per unire i file XML e quindi trasformare un oggetto XDocument.

    • Grazie. Mi dispiace, io odio XSL. Mi sarebbe sicuramente preferisco un codice c# a base di soluzione.
    • Nessun problema, capisco XSL evitare in quanto può essere molto confusa a volte.

Lascia un commento