如何更新特定的XElement?

在这个XML中更新XElement( 更新元素Pen的itemNumber的值 )的最佳方法是什么?

   Pen 12   Paper 23   

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

你可以找到它并使用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; 

我会使用Xpath来查找您要查找的元素,然后直接操作它。

对于XPath类似//Category[itemName='Pen']/itemNumber会在Xpath上找到更多元素

以下(非常基本的)片段对我来说是单声道的

 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]); } } } 

使用XPath(大多数XML开发人员都熟悉):

 var xml = @"   Pen 12   Paper 23  "; 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");