2009-07-23 25 views
7

XElement को अपडेट करने का सबसे अच्छा तरीका क्या है (आइटम के मान को अपडेट करें तत्व संख्या संख्या) इस XML में?मैं एक विशिष्ट XElement कैसे अपडेट कर सकता हूं?

<?xml version="1.0" encoding="utf-8"?> 
<MyStore> 
    <Category> 
    <itemName>Pen</itemName> 
    <itemNumber>12</itemNumber> 
    </Category> 
    <Category> 
    <itemName>Paper</itemName> 
    <itemNumber>23</itemNumber> 
    </Category> 
</MyStore> 

उत्तर

11
XDocument doc; 
... 
XElement penItemValue = doc 
    .Elements("MyStore") 
    .Elements("Category") 
    .Elements("itemName") 
    .Single(itemName => itemName.Value == "Pen") 
    .Parent 
    .Element("itemValue"); 
penItemValue.Value = "123"; 
+0

मुझे तत्वों और तत्वों में कोई समस्या है। जब यह तत्व था, तो उसने मुझे उपरोक्त एक्सएमएल के लिए एक नतीजा दिया, लेकिन मैंने आपके दृष्टिकोण का पालन किया और इसे प्राप्त किया। – paradisonoir

+0

उत्कृष्ट जवाब! मुझे कुछ चीजों को संदर्भित करने की आवश्यकता थी सिस्टम। लिंक्स और सिस्टम। मेरी परियोजना में लिंक्सएक्सप्रेस। साथ ही, VB.NET समकक्ष (xxx) कथन का समतुल्य है: .Single (फ़ंक्शन (itemName) itemName.Value = "पेन") – robnick

1

मैं, तत्व आप देख रहे थे खोजने के लिए Xpath का प्रयोग करेंगे तो यह सीधे हेरफेर।

//Category[itemName='Pen']/itemNumber तरह XPath कुछ तत्व for more on Xpath see

निम्नलिखित (बहुत बुनियादी) को खोजने मोनो में मेरे लिए काम करता है झलकी हैं

using System.Xml; 

namespace test 
{ 

    class myclass 
    { 

    public static void Main(string[] argv) 
    { 
    XmlTextReader reader = new XmlTextReader(argv[0]); 
    XmlDocument doc = new XmlDocument(); 
    doc.Load(reader); 
    reader.Close();   
    XmlNode myNode; 
    XmlElement root = doc.DocumentElement; 
    myNode = root.SelectSingleNode("//Category[itemName='Pen']/itemNumber"); 

    myNode.InnerText = "18"; 

    doc.Save(argv[1]); 
    } 
} 
} 
3

आप इसे खोजने के लिए और LinqToXml उपयोग करके उसे अपडेट कर सकता है के लिए:

XElement root = XElement.Load("myXml.xml"); 

var penCategory = from category in root.Descendants("Category") 
        where category.Element("itemName") != null 
        && category.Element("itemName").Value == "Pen" 
        select category; 

penCategory.Element("itemName").Value = updatedValue; 
+0

आप 'वंशज() क्यों प्रयोग करते हैं' इतना आक्रामक तरीके से, जहां 'तत्वों()' ठीक करना होगा? –

+0

किसी भी चीज़ से ज्यादा आदतें। – womp

+0

thx, इससे मदद मिली :) –

0

का प्रयोग XPath (जो सबसे एक्सएमएल devs परिचित होंगे):

var xml = @"<?xml version=""1.0"" encoding=""utf-8""?> 
    <MyStore> 
    <Category> 
     <itemName>Pen</itemName> 
     <itemNumber>12</itemNumber> 
    </Category> 
    <Category> 
     <itemName>Paper</itemName> 
     <itemNumber>23</itemNumber> 
    </Category> 
    </MyStore>"; 

    var doc = new XmlDocument(); 
    doc.LoadXml(xml); 
    var nav = doc.CreateNavigator(); 
    var iter = nav.Select("/MyStore/Category[itemName='Pen']/itemNumber"); 
    iter.MoveNext(); 
    iter.Current.SetValue("42"); 
+0

उन्होंने विशेष रूप से 'XElement' के लिए ऐसा करने के बारे में पूछा। –

संबंधित मुद्दे