c# - 更新 IEnumerable<XElement> 并将更改保存在 XML 文档中 C#

标签 c# xml linq linq-to-xml ienumerable

<OTPC>
  <OTPCDATA>
    <PROGRAM>LOT676-Q1T2-24 RevB @MC1 PVDB Version 3.8</PROGRAM>
    <TOTAL_QTY>54123</TOTAL_QTY>
    <PASS_QTY>60866</PASS_QTY>
    <FAIL_QTY>3257</FAIL_QTY>
    <FILE_DATE>7/29/2016 10:05:47 AM</FILE_DATE>
    <FILE_TIME>10:05:47</FILE_TIME>
    <STATUS>0</STATUS>
  </OTPCDATA>
....So On---
</OTPC>

上面是XML我需要修改并保存源文档中的更改。可能有Status=1以及。我正在过滤XDocument像下面这样。

 XDocument unreadOTPC = XDocument.Load(pathToRead);
 var filteredOTPC = unreadOTPC.Element("OTPC")
                .Descendants("OTPCDATA")
                .Where(x => x.Element("STATUS").Value == "0");

它返回我IEnumerable<XElement> 。我正在使用 filteredOTPC.ForEach(s=>) 更新状态

如何更新/合并修改的 IEnumerable<XElement>原版XDocument实例并将更改保存在XML中源文件。

最佳答案

“IEnumerable 与 unreadOTPC 分离” 引起了一些困惑,如果我正确理解了问题,您需要更新 Xml< 中的 STATUS 并保存文档。

所以,你可以这样做。

XDocument doc = XDocument.Load(filepath);

var elements  = doc
        .Descendants("OTPCDATA")                       //flatten your hierarchy
        .Where(x=>(string)x.Element("STATUS") =="0")   // filter those elements whose nested status is  "0".
        .Select(x=>x.Element("STATUS"));               // Select those elements.

现在您可以使用任何循环逻辑更新元素。

// Now update element value
foreach(var element in elements)
{
    // your logic.
    element.Value = "1";
}

doc.Save();

检查这个Demo

关于c# - 更新 IEnumerable<XElement> 并将更改保存在 XML 文档中 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38733485/

相关文章:

c# - 如何按列表使用的对象内的元素对列表进行排序?

c# - 如何从 C 程序生成 DLL 以用于 C# 项目

c# - 访问具有特定值的 XElement

c# - 如何更新/修改 LINQ 实体集?

entity-framework - Entity Framework Linq 将 lambda 表达式嵌入到可重用函数中

c# - 找不到命名空间名称的类型(是否缺少 using 指令或程序集引用?)

C# 通过希伯来语返回问号句柄获取窗口标题

java - 使用 SAX 解析文档将对象添加到数组

xml - long 类型的 xsd 属性

c# - 根据条件从列表中删除项目