删除包含特定值的 XML 节点
本文关键字:XML 节点 包含特 删除 | 更新日期: 2023-09-27 18:32:36
这是xml结构。我正在尝试删除状态包含单词失败的每个状态节点。删除这些的最佳方法是什么?
<Stats>
<Status>
<Desc>something here</Desc>
<State>pending - ok</State>
</Status>
<Status>
<Desc>something here</Desc>
<State>failed</State>
</Status>
</Stats>
void Main()
{
XDocument xml = XDocument.Parse(@"<Stats>
<Status>
<Desc>something here</Desc>
<State>pending - ok</State>
</Status>
<Status>
<Desc>something here</Desc>
<State>failed</State>
</Status>
</Stats>");
xml.Descendants("State").Where (x => x.Value.Contains("fail")).Ancestors("Status").Remove();
Console.WriteLine(xml.ToString());
}
解析将在内存中加载 xml,加载用于从流或通过 I/O 方式加载它。
@Gregory皮拉尔的回答严重影响了这个答案;我相信他从记忆中写道,我提供的片段是通过 LinqPad 进行测试并返回预期结果的。
您可以使用 Linq to XMl 来完成这项工作
var xdoc = XDocument.Load(path_to_xml);
xdoc.Descendants("Status")
.Where(os => (int)os.Attribute("State") == "failed")
.Remove();
xdoc.Save(path_to_xml);
xDoc.Descendants("Status").Where(status => status.Element("State").Value.ToLower().Contains("fail")).Remove();