【问题标题】:How to update all instances of an element in XDocument?如何更新 XDocument 中元素的所有实例?
【发布时间】:2020-01-01 21:43:12
【问题描述】:

我的 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>

【问题讨论】:

  • 如何更新它们?对于每个用户?所有这些都具有相同的价值?取决于另一个值?

标签: c# linq linq-to-xml


【解决方案1】:

Linq 是一种查询语言,所以你不能直接用它来修改值,但是你可以很容易地用它选择文档中的所有Resource 元素并迭代/更改它们。

例如:

// 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(),它们在层次结构的单个级别上工作。

【讨论】:

    猜你喜欢
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多