繁体   English   中英

删除包含特定值的XML节点

[英]Delete XML node that contains a certain value

这是xml结构。 我试图删除状态包含单词失败的每个状态节点。 删除这些的最佳方法是什么?

<Stats>
    <Status>
        <Desc>something here</Desc>
        <State>pending - ok</State>
    </Status>
    <Status>
        <Desc>something here</Desc>
        <State>failed</State>
    </Status>
</Stats>

你可以使用Linq到XMl来完成这项工作

var xdoc = XDocument.Load(path_to_xml);

xdoc.Descendants("Status")
.Where(os => (int)os.Attribute("State") == "failed")
.Remove();

xdoc.Save(path_to_xml);
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());  
}

Parse将加载内存中的xml,Load用于从流中加载或通过I / O方式加载。

@Gregory Pilar的回答严重影响了这个答案; 我相信他是从内存中写的,我提供的代码段是通过LinqPad进行测试并返回预期的结果。

xDoc.Descendants("Status").Where(status => status.Element("State").Value.ToLower().Contains("fail")).Remove();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM