Как я могу обновить определенный XElement?

9
задан paradisonoir 23 July 2009 в 22:13
поделиться

4 ответа

XDocument doc;
...
XElement penItemValue = doc
     .Elements("MyStore")
     .Elements("Category")
     .Elements("itemName")
     .Single(itemName => itemName.Value == "Pen")
     .Parent
     .Element("itemValue");
penItemValue.Value = "123";
13
ответ дан 4 December 2019 в 12:20
поделиться

Вы можете найти и обновить его с помощью 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;
3
ответ дан 4 December 2019 в 12:20
поделиться

Я бы использовал Xpath, чтобы найти элемент, который вы ищете, а затем напрямую управлять им.

Для XPath что-то вроде // Категория [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]);
  }
}
}
1
ответ дан 4 December 2019 в 12:20
поделиться

Использование XPath (который будет знаком большинству разработчиков XML):

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
ответ дан 4 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: