2008-11-11 23 views
14

में एक्सएमएल फाइलों को मर्ज करें मैं एक एक्सडी दस्तावेज़ ऑब्जेक्ट में कई एक्सएमएल फाइलों को मर्ज करने की कोशिश कर रहा हूं।एक्सडी दस्तावेज़

मर्ज XDocument ऑब्जेक्ट में मौजूद नहीं है। मुझे यह याद आती है।

क्या किसी ने पहले से ही XDocument के लिए मर्ज एक्सटेंशन विधि लागू की है, या कुछ ऐसा ही है?

उत्तर

24

मैं थोड़ा अपने आप करने की कोशिश की:

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

मुझे पता है कि क्या यह अच्छा है या बुरा है नहीं है, लेकिन यह मेरे लिए ठीक काम करता है :-)

0

वर्कअराउंड के रूप में, आप एक्सएमएल फाइलों को मर्ज करने के लिए एक्सएसएल फ़ाइल का उपयोग कर सकते हैं और फिर इसे एक्सडी दस्तावेज़ ऑब्जेक्ट में बदल सकते हैं।

+1

धन्यवाद। मुझे खेद है, मैं एक्सएसएल से नफरत करता हूं। मैं निश्चित रूप से एक सी # कोड आधारित समाधान पसंद करेंगे। – Larry

+0

कोई समस्या नहीं, मैं एक्सएसएल से बचने को समझता हूं क्योंकि यह कभी-कभी बहुत भ्रमित हो सकता है। – schnaader

3

व्यावहारिक होने के नाते, XDocument बनाम XmLDocument सभी या कुछ भी नहीं नहीं है (जब तक आप सिल्वरलाइट पर हैं) - तो अगर XmlDoucument कुछ आप की जरूरत है, और XDocument, तो शायद का उपयोग नहीं करता XmlDocument (ImportNode आदि के साथ)।

यह कहा गया है कि XDocument के साथ भी, आप संभावित रूप से का उपयोग प्रत्येक आयात करने के लिए कर सकते हैं, फिर केवल .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); 
       }     
      } 
     } 
    } 
+0

बहुत बहुत धन्यवाद :) मुझे लगता है कि मुझे कुछ ऐसा मिला है जो कम कोड के साथ काम करता है। – Larry

3

मर्ज सभी एक्सएमएल फ़ाइलें डीआईआर से एक एक्सडॉक्यूमेंट

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; 
} 
संबंधित मुद्दे