【问题标题】:Update IEnumerable<XElement> and save changes in XML document C#更新 IEnumerable<XElement> 并在 XML 文档 C# 中保存更改
【发布时间】:2016-08-03 02:39:07
【问题描述】:
<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&lt;XElement&gt;。我正在使用filteredOTPC.ForEach(s=&gt;)更新状态

如何在原始XDocument 实例中更新/合并修改后的IEnumerable&lt;XElement&gt; 并在XML 源文件中保存更改。

【问题讨论】:

  • 那么问题来了,如何更新status元素并保存文档?
  • 是的,更新了我的问题格式,

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


【解决方案1】:

“IEnumerable 与 unreadOTPC 分离” 造成了一些混乱,如果我正确理解问题,您需要更新 Xml 中的 STATUS 值并保存文档。 p>

所以,你可以这样做。

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

【讨论】:

  • 让我试一试,感谢您的及时回复
  • 谢谢,我发现我没有正确调试我的代码,我接受你的回答。
猜你喜欢
  • 1970-01-01
  • 2015-02-09
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 2014-06-09
  • 1970-01-01
相关资源
最近更新 更多