2012-10-15 22 views
2

我可以刪除使用如何一次刪除多個XML節點?

XmlNode node = newsItem.SelectSingleNode("XYZ"); 
node.ParentNode.RemoveChild(node); 

但是,如果我想一次刪除多個節點什麼,比如XYZ,ABC,PQR一個XML節點?

有什麼辦法可以一次刪除所有這些節點,或者我必須一個個刪除它們嗎?

注:XYZ,ABC,PQR處於同一水平(即它們都具有相同的父)

回答

4

沒有什麼是內置API的XDocument,那麼事情可能會有所不同。

+0

+1的擴展名。但我認爲必須有一個內置的方法 – Champ

+0

@Champ確實......但:沒有 –

+0

可能會建議將其更改爲像[RemoveChild']一樣返回'XmlNode'(http://msdn.microsoft.com/zh-cn/ /library/system.xml.xmlnode.removechild.aspx)方法確實保持相似並在適用時保持鏈接。 –

1

這將取決於結構(嵌套)非常多等

但基本上是的,對於極少數不相關的元素,請一次選擇並刪除它們。

你可以將它們組合在一定程度上:

List<string> RemoveNames = ... 
var toBeRemoved = doc.Descendants().Where(d => RemoveNames.Contains(d.name)); 
foreach (var element in toBeRemoved.ToList()) ... 
+0

這與將它們逐一刪除 – Champ

+0

是的,它會是。但在一個並不糟糕的循環中。 –

1

認爲你可以做這樣的事情使用LINQ to XML。

public static void Remove(this XmlNode node, string xpath) 
{ 
    var nodes = node.SelectNodes(xpath); 
    foreach (XmlNode match in nodes) 
    { 
     match.ParentNode.RemoveChild(match); 
    } 
} 

然後調用:

newsItem.Remove("XYZ|ABC|PQR"); 

如果你可以改變使用時XmlDocument API,但你可以寫一個實用的擴展方法,例如

var listOfNodesToRemove = new[]{"XYZ", "ABC", "PQR"}; 

var document = XDocument.Load(<pathtoyourfile>); 
document.Descendants 
     .Where(m => listOfNodesToRemove.Contains(m.Name.ToString()) 
     .Nodes() 
     .Remove(); 
+0

不在尋找Linq – Champ