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

本文关键字:存在 保存 XML 文档 lt IEnumerable XElement gt 更新 | 更新日期: 2023-09-27 17:59:46

<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,我需要修改并保存源文档中的更改。也可能存在CCD_ 2。我正在过滤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=>) 更新状态

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

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

"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