如何更新 XDocument 中元素的所有实例?

How to update all instances of an element in XDocument?

我有 xml 结构如下。如何替换此结构中随处可见的元素值?有没有办法使用 Linq 来做到这一点?此外,有时结构可能不同,但总会有 Resource 元素,因此我需要查看 Resource 的所有实例而不关心它存在的位置。

感谢您的任何建议。

<Users>
    <User>
        <Number>123456</Number>
        <ID>1</ID>
        <Events>
          <Event>
            <ID>12</ID>
          </Event>
        </Events>
        <Items>
          <Item>
            <ID>12</ID>
            <Resource>Replace this value</Resource>
          </Item>
          <Item>
            <ID>13</ID>
            <Resource>Replace this value</Resource>
          </Item>
          <Item>
            <ID>14</ID>
            <Resource>Replace this value</Resource>
          </Item>
        </Items>
    </User>

    //More User elements where Resource needs to be updated
    <User>
    </User>

    <User>
    </User>
</Users>

Linq是一种查询语言,所以你不能直接用它来修改值,但是你可以很容易地select文档中的所有Resource元素用它和iterate/change他们。

例如:

// or load from xml, however you have it
var xDoc = XDocument.Load(@"c:\temp\myxml.xml"); 
// iterate every Resource element
foreach (XElement element in xDoc.Descendants("Resource"))            
    element.Value = "Hello, world";        

这将挑选出 XML 中的每个 Resource 元素,而不管它在层次结构中的什么位置,在您的情况下,这就是您所需要的。如果您需要更具体地定位它,您可以使用 XPath 表达式或进一步的 Linq 调用,例如在层次结构的单个级别上工作的 Element()