2008-10-07 16 views
25

पर XML स्ट्रिंग ब्लॉक संलग्न करें मेरे पास XmlDocument है जो पहले से मौजूद है और फ़ाइल से पढ़ा गया है।मौजूदा XmlDocument

मैं दस्तावेज़ में नोड में एक्सएमएल का एक हिस्सा जोड़ना चाहता हूं। क्या मेरे कोड को कई लोगों के साथ छेड़छाड़ किए बिना सभी नोड्स बनाने और जोड़ने का कोई अच्छा तरीका है। CreateNote और .AppendChild कॉल?

मुझे एक स्ट्रिंग या स्ट्रिंग बनाने का कोई तरीका चाहिए जो एक वैध एक्सएमएल अनुभाग का निर्माता है और बस इसे एक्सएमएलएनोड में जोड़ रहा है।

पूर्व: मूल xmlDoc:

<MyXml> 
    <Employee> 
    </Employee> 
</MyXml> 

और, मैं एक जनसांख्यिकीय (कई बच्चों के साथ) कर्मचारी के टैग को जोड़ने के लिए करना चाहते हैं:

<MyXml> 
    <Employee> 
     <Demographic> 
     <Age/> 
     <DOB/> 
     </Demographic> 
    </Employee> 
</MyXml> 

उत्तर

71

मैं XmlDocument.CreateDocumentFragment उपयोग करने का सुझाव अगर आपके पास मुक्त रूप तारों में डेटा। आपको नोड में टुकड़ा जोड़ने के लिए अभी भी एपेंड चाइल्ड का उपयोग करना होगा, लेकिन आपके पास अपने स्ट्रिंगबिल्डर में एक्सएमएल बनाने की स्वतंत्रता है। वैकल्पिक रूप से

employeeNode.InnerXml = "<Demographic><Age/><DOB/></Demographic>"; 

(यदि आप किसी अन्य XML दस्तावेज़ है कि आप उपयोग करना चाहते हैं):

XmlDocument xdoc = new XmlDocument(); 
xdoc.LoadXml(@"<MyXml><Employee></Employee></MyXml>"); 

XmlDocumentFragment xfrag = xdoc.CreateDocumentFragment(); 
xfrag.InnerXml = @"<Demographic><Age/><DOB/></Demographic>"; 

xdoc.DocumentElement.FirstChild.AppendChild(xfrag); 
+2

लघु और बिंदु ... उत्कृष्ट! +1 – tigerswithguitars

+0

उत्कृष्ट समाधान – Nirman

+0

क्या होगा यदि खंड में गुणों में उद्धरण (") जैसे हैं? – Raulp

11

इस प्रयास करें

employeeNode.AppendChild(employeeNode.OwnerDocument.ImportNode(otherXmlDocument.DocumentElement, true)); 
2

एक StringBuilder पर अपने टुकड़े के निर्माण के लिए एक XmlWriter उपयोग करने पर विचार क्योंकि यह आपके लिए सत्यापन और चरित्र प्रतिस्थापन प्रदान करेगा।

+0

@ffpf: +1 अच्छी सलाह है, लेकिन नामस्थान और XmlWriter हमेशा मुझे वापस जा रहा है एमएसडीएन के लिए। – user7116

6

एक विकल्प के रूप में, यह कैसे आप एक अधिक LINQy 3.5 तरीके से कर सकता है है:

XDocument doc = XDocument.Load(@"c:\temp\test.xml"); 
XElement demoNode = new XElement("Demographic"); 
demoNode.Add(new XElement("Age")); 
demoNode.Add(new XElement("DOB")); 
doc.Descendants("Employee").Single().Add(demoNode); 
doc.Save(@"c:\temp\test2.xml"); 
0

सभी कि मुझे क्या करना एक नया डाटासेट वस्तु बनाने और ReadXml myDataset.ReadXML(path and file name) का उपयोग कर एक्सएमएल फ़ाइल को खोलने है।

फिर पंक्तियों को जोड़ें या हटाएं जिन्हें मुझे चाहिए और दस्तावेज़ को फिर से myDataset.WriteXML(path and file name) का उपयोग करके सहेजें।

अलविदा।

0

इनमें से कोई भी मेरे लिए काम नहीं कर रहा था इसलिए मैंने abit के आसपास खेला और यहां मेरा समाधान है।

पहले टेक्स्ट फ़ील्ड को लोड करें (आप इसे सार्वजनिक संस्करण में दृश्यमान = गलत में डाल सकते हैं) इस तरह के टेक्स्ट फ़ील्ड में डेटा लोड करें।

string Path = Directory.GetCurrentDirectory() + "/2016"; 
      string pathFile = Path + "/klanten.xml"; 
      StreamReader sr = new StreamReader(pathFile); 
      txt.Text = sr.ReadToEnd(); 
      sr.Close(); 

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

string name = Globals.s_Name; 
     string klanten = txt.Text; 
     string s = klanten; 
     XmlDocument xdoc = new XmlDocument(); 

     string klant = "<voornaam>" + naamBox1.Text + "</voornaam>"; 
     xdoc.LoadXml(s); 
     XmlDocumentFragment xfrag = xdoc.CreateDocumentFragment(); 
     xfrag.InnerXml = klant; 
     xdoc.DocumentElement.FirstChild.AppendChild(xfrag); 
     xdoc.Save(name + "/klanten.xml"); 
संबंधित मुद्दे