C# 使用ID修改节点值C

C# 使用ID修改节点值C,c#,xml,silverlight,linq-to-xml,xelement,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> &

以下是我的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>
我的问题是,我想修改例如名称1的节点内容,它位于其中,具有1个按ID搜索

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


致以最诚挚的问候。

如果您不知道如何找到要更新的正确节点,诀窍是首先选择一个包含正确节点的节点,然后才能获得该节点

比如:

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:通过使用子代SID。首先,我希望每个选择节点都包含一个ID节点。 注2:每个选择节点都包含一个Nom节点
注3:如果需要的话,现在仍然需要存储整个XML。

另一种方法是使用XmlDocument:


看看这个:我想答案是准确的,因为它是John Skeet:注意/TLDR:您不能用XML更新单个节点,您必须加载文件,在程序中更改该节点,然后重写XML文件。问题到底是什么:1找到要更新的正确节点,2更改节点的值或3将更改持久化到从文件、数据库中获取XML的任何位置。。?
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");