我可以刪除使用如何一次刪除多個XML節點?
XmlNode node = newsItem.SelectSingleNode("XYZ");
node.ParentNode.RemoveChild(node);
但是,如果我想一次刪除多個節點什麼,比如XYZ,ABC,PQR
一個XML節點?
有什麼辦法可以一次刪除所有這些節點,或者我必須一個個刪除它們嗎?
注:XYZ,ABC,PQR
處於同一水平(即它們都具有相同的父)
我可以刪除使用如何一次刪除多個XML節點?
XmlNode node = newsItem.SelectSingleNode("XYZ");
node.ParentNode.RemoveChild(node);
但是,如果我想一次刪除多個節點什麼,比如XYZ,ABC,PQR
一個XML節點?
有什麼辦法可以一次刪除所有這些節點,或者我必須一個個刪除它們嗎?
注:XYZ,ABC,PQR
處於同一水平(即它們都具有相同的父)
沒有什麼是內置API的XDocument
,那麼事情可能會有所不同。
這將取決於結構(嵌套)非常多等
但基本上是的,對於極少數不相關的元素,請一次選擇並刪除它們。
你可以將它們組合在一定程度上:
List<string> RemoveNames = ...
var toBeRemoved = doc.Descendants().Where(d => RemoveNames.Contains(d.name));
foreach (var element in toBeRemoved.ToList()) ...
這與將它們逐一刪除 – Champ
是的,它會是。但在一個並不糟糕的循環中。 –
認爲你可以做這樣的事情使用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();
不在尋找Linq – Champ
+1的擴展名。但我認爲必須有一個內置的方法 – Champ
@Champ確實......但:沒有 –
可能會建議將其更改爲像[RemoveChild']一樣返回'XmlNode'(http://msdn.microsoft.com/zh-cn/ /library/system.xml.xmlnode.removechild.aspx)方法確實保持相似並在適用時保持鏈接。 –