0

这是xml结构。我正在尝试删除 State 包含单词 failed 的每个 Status 节点。删除这些的最佳方法是什么?

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

3 回答 3

1

您可以使用 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);
于 2013-09-25T02:29:03.020 回答
1
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 进行测试并返回预期结果。

于 2013-09-25T04:30:45.107 回答
0
xDoc.Descendants("Status").Where(status => status.Element("State").Value.ToLower().Contains("fail")).Remove();
于 2013-11-11T13:50:02.273 回答