2009-05-28 24 views
15

संभव डुप्लिकेट का उपयोग कर सी # एक्सएमएल फ़ाइल से नोड को हटाने के लिए:
How to remove an XmlNode from XmlNodeListकैसे

हाय, कैसे मैं एक XML फ़ाइल से नोड्स का एक सेट हटा सकते हैं।? यहां एक कोड स्निपेट है।

string path = @"C:\Documents and Settings\e454935\Desktop\NUnitSettings.xml"; 
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument(); 
xmldoc.Load(fs); 
fs.Close(); 
xmldoc.DocumentElement.RemoveChild(xmldoc.DocumentElement.ChildNodes[1]); 
FileStream WRITER = new FileStream(path, FileMode.Truncate, FileAccess.Write, FileShare.ReadWrite); 
xmldoc.Save(WRITER); 
WRITER.Close(); 

मैं बस एक नोड हटाने के लिए निम्न कोड की कोशिश की और मिल गया "ऑब्जेक्ट संदर्भ एक वस्तु का एक उदाहरण के लिए सेट नहीं।"

xmldoc.DocumentElement.RemoveChild(xmldoc.DocumentElement.ChildNodes[1]); 

यहां एक नमूना एक्सएमएल फ़ाइल है,

<?xml version="1.0"?> 
<Xml1> 
    <Settings> 
    <Setting name="DisplayFormat" value="Full" /> 
    <Setting name="File1" value="a" /> 
    <Setting name="File1" value="b" /> 
    <Setting name="File1" value="c" /> 
    <Setting name="File1" value="d" /> 
    </Settings> 
</Xml1> 
इस फाइल मैं जो मूल्यों "ए, बी, सी, डी" है चार File1 नोड्स को नष्ट करना चाहते से

वास्तव में और कम से तो मैं करना चाहते हैं एक नोड,

<Setting name="File1" value="e" /> 

मैं यह कैसे कर सकते जोड़ें।?

+3

इसका उत्तर यहां दिया गया है http://stackoverflow.com/questions/875136 पहले से ही, और शायद अन्य प्रश्नों में दो दर्जन बार। एक डुप्ली के रूप में बंद करने के लिए वोट दिया। – Tomalak

उत्तर

6

उन नोड्स को ढूंढने के लिए XPath का उपयोग करना आसान हो सकता है जिन्हें आप हटाना चाहते हैं। This stackoverflow thread आपको कुछ विचार दे सकता है।

XmlDocument doc = new XmlDocument(); 
doc.Load(fileName); 
XmlNodeList nodes = doc.SelectNodes("//Setting[@name='File1']"); 
2

DocumentElement दस्तावेज़ का रूट नोड है इसलिए childNodes[1] उस दस्तावेज़ में मौजूद नहीं है। childNodes[0] < सेटिंग्स > नोड

+0

+1 यह बताते हुए कि त्रुटि कहां है। – Tomalak

23

आप Linq to XML उपयोग कर सकते हैं यह करने के लिए:

अपने मामले में आप चार नोड्स है कि आप इस अभिव्यक्ति का उपयोग कर चाहते मिलेगा

XDocument doc = XDocument.Load("input.xml"); 
var q = from node in doc.Descendants("Setting") 
     let attr = node.Attribute("name") 
     where attr != null && attr.Value == "File1" 
     select node; 
q.ToList().ForEach(x => x.Remove()); 
doc.Save("output.xml"); 
6

एक्सएमएल से हटाया जा रहा है नोड्स

  XmlDocument doc = new XmlDocument(); 
      doc.Load(path); 
      XmlNodeList nodes = doc.SelectNodes("//Setting[@name='File1']"); 
      for (int i = nodes.Count - 1; i >= 0; i--) 
      { 
       nodes[i].ParentNode.RemoveChild(nodes[i]); 
      } 
      doc.Save(path); 

एक्सएमएल

में नोड्स में विशेषता जोड़ना
XmlDocument originalXml = new XmlDocument(); 
    originalXml.Load(path); 
    XmlNode menu = originalXml.SelectSingleNode("//Settings"); 
    XmlNode newSub = originalXml.CreateNode(XmlNodeType.Element, "Setting", null); 
    XmlAttribute xa = originalXml.CreateAttribute("name"); 
    xa.Value = "qwerty"; 
    XmlAttribute xb = originalXml.CreateAttribute("value"); 
    xb.Value = "555"; 
    newSub.Attributes.Append(xa); 
    newSub.Attributes.Append(xb); 
    menu.AppendChild(newSub); 
    originalXml.Save(path); 
+0

सुनिश्चित नहीं है कि आप क्यों कम किए गए थे, लेकिन मेरे द्वारा +1। वह नोड। ParentNode.RemoveChild (नोड) याद रखने के लिए कोड की एक आसान लाइन है। –