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

标签 c# linq linq-to-xml

我的 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 是一种查询语言,因此您不能直接使用它来修改值,但您可以使用它轻松地选择文档中的所有 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()

关于c# - 如何更新 XDocument 中元素的所有实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57696193/

相关文章:

c# - 如何在 C# 中动态创建 XML 架构?

c# - 在 Visual Studio 中输出控制台应用程序而不是控制台

c# - 到存储库或不到存储库

c# - 在linq中加入未知数量的列表

.net - 单元测试 Entity Framework

c# - 使用 xsi :schemaLocation namespace 创建 XDocument

c# - 跳过 IEnumerable 中的第一个和最后一个,推迟执行

c# - 使用 MonoTouch 创建自定义图像过滤器

c# - 如何使用 linq-to-entities 构建类似 selectbyexample 的查询?

c# - LINQ to XML 查询中的 NullReferenceException