2013-09-25 77 views
0

这里是xml结构。 我想删除状态包含单词失败的每个状态节点。 什么是删除这些最好的方法?删除包含特定值的XML节点

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

回答

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()); 
} 

解析将加载XML内存,装载用于从流或通过我在加载/ O手段。

@Gregory皮拉尔的答案严重影响了这个答案;我相信他从记忆中写道,我提供的片段是通过LinqPad进行测试并返回预期结果。

+0

谢谢我有问题排序 – Tsukasa

1

您可以使用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); 
+0

它不喜欢将int与字符串进行比较。我改变它如下,但得到一个空引用错误:.Where(os => os.Attribute(key).Value.ToLower()。Contains(value)) – Tsukasa

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