Изменить значение узла C# с идентификатором

Вот мой XML:

  <?xml version="1.0" encoding="utf-8" ?>
   <Selection>
    <ID>1</ID>
    <Nom>Name 1</Nom>
    <DateReference>0</DateReference>
    <PrefixeMedia>Department</PrefixeMedia>
    <FormatExport>1630</FormatExport>
    <TraceAuto>Oui</TraceAuto>
    <SubID></SubID>
  </Selection>
  <Selection>
    <ID>2</ID>
    <Nom>Name 1</Nom>
    <DateReference>0</DateReference>
    <PrefixeMedia>Department</PrefixeMedia>
    <FormatExport>1630</FormatExport>
    <TraceAuto>1</TraceAuto>
    <SubID>1</SubID>
  </Selection>

Моя проблема, я хотел бы изменить, например, содержимое узла <Nom>Name 1</Nom> который расположен в <Selection></Selection> который имеет <ID>1</ID> (Поиск по идентификатору)

Я использую XElement и XDocument для простого поиска, но мне нужна помощь, чтобы решить эту проблему выше. (Разработка на SilverLight

С уважением.

2 ответа

Решение

Если вы не знаете, как добраться на правильном <Nom> узел для обновления, хитрость заключается в том, чтобы сначала выбрать <Selection> узел, который содержит правильный <ID> узел, то вы можете получить это <Nom> узел.

Что-то вроде:

XElement tree = <your XML>;
XElement selection = tree.Descendants("Selection")
      .Where(n => n.Descendants("ID").First().Value == "1") // search for <ID>1</ID>
      .FirstOrDefault();
if (selection != null)
{
  XElement nom = selection.Descendants("Nom").First();
  nom.Value = "Name one";
}

Примечание 1: с помощью Descendants("ID").First() Я ожидаю, что каждый узел выбора будет содержать узел идентификатора.
Примечание 2: И каждый узел выбора содержит узел Nom
Примечание 3: Теперь вам все еще нужно хранить весь XML, если это то, что вам нужно.

Еще один способ сделать это с помощью XmlDocument:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"\path\to\file.xml");

// Select the <nom> node under the <Selection> node which has <ID> of '1'
XmlNode name = xmlDoc.SelectSingleNode("/Selection[ID='1']/Nom");

// Modify the value of the node
name.InnerText = "New Name 1";

// Save the XML document 
xmlDoc.Save(@"\path\to\file.xml");
Другие вопросы по тегам