Изменить значение узла 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");