2012-03-08 12 views
9

मैं उस xml फ़ाइल है:सी #: संशोधित एक xml नोड

<?xml version="1.0" encoding="utf-8"?> 
<reminders> 
    <reminder> 
    <Title>Alarm1</Title> 
    <Description>Desc1</Description> 
    <Time>03/07/2012 10:11AM</Time> 
    <snooze>1</snooze> 
    <repeat>None</repeat> 
    </reminder> 
</reminders> 

और मैं तो मैं उस कोड जो वास्तव में पूरी नोड नकल लिखा एक और मूल्य के लिए Alarm1 से innerText संशोधित करना चाहते हैं।

 foreach (XmlElement element in xml.SelectNodes("//reminder")) 
     { 
      if (element.InnerText == "Alarm1") 
      { 
       XmlNode newvalue = xml.CreateElement("MODIFIED"); 
       element.ReplaceChild(newvalue, element); 

       xml.Save("0.xml"); 
      } 
     } 

लेकिन भी doesn `t काम ....

संपादित करें: 1: [एक नया कोड पता लगा]

 XmlDocument xml = new XmlDocument(); 

     xml.Load("0.xml"); 

     foreach (XmlElement element in xml.SelectNodes("//reminder")) 
     { 
      foreach (XmlElement element1 in element) 
      { 
       if (element.SelectSingleNode("//Title").InnerText == "Alarm1") 
       { 
        XmlNode newvalue = xml.CreateElement("MODIFIED"); 
        element.ReplaceChild(newvalue, element1); 

        xml.Save("0.xml"); 
       } 
      } 
     } 

 XmlDocument xml = new XmlDocument(); 

     xml.Load("0.xml"); 

     XmlNodeList elements = xml.SelectNodes("//reminders"); 

     foreach (XmlNode element in elements) 
     { 
      if (element.InnerText == "Alarm1") 
      { 
       XmlNode newvalue = xml.CreateElement("MODIFIED"); 
       element.ReplaceChild(newvalue, element); 

       xml.Save("0.xml"); 
      } 
     } 

और फिर एक और कोड की कोशिश की

लेकिन यह अलार्म 1

बन गया

संपादित करें 2: यहाँ ठीक है कोड मैं यह पता लगाने सकता है:

 XmlDocument xml = new XmlDocument(); 

     xml.Load("0.xml"); 

     foreach (XmlElement element in xml.SelectNodes("//reminder")) 
     { 
      foreach (XmlElement element1 in element) 
      { 
       if (element.SelectSingleNode("//Title").InnerText == "Alarm1") 
       { 
        MessageBox.Show(element1.InnerText); 
        XmlNode newvalue = xml.CreateElement("Title"); 
        newvalue.InnerText = "MODIFIED"; 
        element.ReplaceChild(newvalue, element1); 

        xml.Save("0.xml"); 
       } 
      } 
     } 

मैं `करूँगा वास्तव में सराहना करते हैं अपने में मदद करता है और धन्यवाद: [डी मैं इसे हल]।

+0

उपयोग 'XDocument', चाहते हैं नहीं' XmlDocument' – Jodrell

+0

अपने उदाहरण और चयनित जवाब LINQ – Jodrell

+0

आप EDIT2 के साथ जा रहे हैं, तो कोई लेना देना नहीं है: लेकिन 'if' में 'अनावश्यक लूपिंग – Jodrell

उत्तर

11

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

xml.SelectSingleNode("//reminder/Title").InnerText = "NewValue"; 

आपका foreach लाइन बस "अनुस्मारक" कहा जाता तत्वों की सूची के माध्यम से पाशन है, नहीं यह बच्चे नोड्स है।

अधिक जानकारी के लिए इस xpath ट्यूटोरियल पर एक नज़र डालें:

http://www.w3schools.com/xpath/xpath_intro.asp

+2

केवल पहला संसाधन था जो मैंने आया था और अतीत में मेरे लिए हमेशा उपयोगी स्रोत रहा है, चाहे सम्मानित हो या नहीं। – aaroncatlin

2
XDocument doc = XDocument.Load("0.xml"); 
IEnumerable<XElement> rech = 
        from el in doc.Root.Elements("reminder") 
        where (string)el.Element("Title") == "Alarm1" 
        select el; 
if (rech.Count() != 0) 
{ 
    foreach (XElement el in rech) 
    { 
     el.Element("Title").SetValue("NEW TITLE"); 
    } 
} 
doc.Save("0.xml"); 
3

आप एक्सएमएल साथ LINQ उपयोग करना चाहते हैं (मैं यह सबसे अच्छा रास्ता खोजने) तो आप उपयोग करना चाहते हैं जाएगा System.Xml.Linq नामस्थान। उस नामस्थान में कक्षाएं केवल XXml के साथ उपसर्गित हैं। इस नामस्थान में कार्यक्षमता लिंक के साथ छेड़छाड़ करने के लिए नई, बेहतर और बहुत आसान है।

var xml = XDocument.Load("0.xml"); 
var alarm1 = xml.Descendants("reminder") 
       .Single(r => r.Element("Title") == "Alarm1"); 

इस कोड को आप एक चर, alarm1 अनुस्मारक के शीर्षक नोड है कि यह है कि दे देंगे "Alarm1।"

उस बिंदु से यह मुझे स्पष्ट नहीं करता कि आप वास्तव में क्या संशोधित करना चाहते हैं। तुम सिर्फ शीर्षक तो बदलने के लिए ...

alarm1.Element("Title").Value = "MODIFIED"; 
xml.Save("0.xml"); 
2
XDocument xDoc = XDocument.Load(.....); 
xDoc.Descendants("Title").First().Value = "New Value"; 
xDoc.Save(...) 
संबंधित मुद्दे