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

Update IEnumerable<XElement> and save changes in XML document C#

<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");

它returns我IEnumerable<XElement>。我正在使用 filteredOTPC.ForEach(s=>)

更新状态

如何 update/Merge 在原始 XDocument 实例中修改 IEnumerable<XElement> 并在 XML 源文件中保存更改。

"IEnumerable is separated from 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