使用ID修改节点值C#

时间:2012-09-12 09:12:18

标签: c# xml silverlight linq-to-xml xelement

这是我的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>的{​​{1}}节点内容,该节点内容位于<Selection></Selection>,其中<ID>1</ID>(按ID搜索)

我正在使用XElement和XDocument进行简单的搜索,但我需要一些帮助来解决上面的这个问题。 (开发SilverLight

最诚挚的问候。

2 个答案:

答案 0 :(得分:1)

另一种方法是使用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");

答案 1 :(得分:0)

如果您不知道如何更新正确的<Nom>节点,那么首先要选择包含正确的<Selection>节点{{1} 1}} node,然后你可以得到那个<ID>节点。

类似的东西:

<Nom>

注1:使用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"; } 我希望每个Selection节点都包含一个ID节点 注2:每个Selection节点都包含一个Nom节点
注3:现在你仍然需要存储整个XML,如果那就是你需要的。