删除XML节点

我还有另一个我无法完成的任务:我应该从这个站点解析XML,删除名称中没有“VIDEO”的所有节点,然后将其保存到另一个XML文件中。 我对阅读和写作没有任何问题,但删除会给我带来一些困难。 我试过做Node – > Parent Node – > Child Node work-aroud,但它看起来没用:

static void Main(string[] args) { using (WebClient wc = new WebClient()) { string s = wc.DownloadString("http://feeds.bbci.co.uk/news/health/rss.xml"); XmlElement tbr = null; XmlDocument xml = new XmlDocument(); xml.LoadXml(s); foreach (XmlNode node in xml["rss"]["channel"].ChildNodes) { if (node.Name.Equals("item") && node["title"].InnerText.StartsWith("VIDEO")) { Console.WriteLine(node["title"].InnerText); } else { node.ParentNode.RemoveChild(node); } } xml.Save("NewXmlDoc.xml"); Console.WriteLine("\nDone..."); Console.Read(); } } 

我也尝试过RemoveAll方法,它不能正常工作,因为它删除了所有不满足“VIDEO”条件的节点。

 //same code as above, just the else statement is changed else { node.RemoveAll(); } 

请问你能帮帮我吗?

我发现Linq To Xml更容易使用

 var xDoc = XDocument.Load("http://feeds.bbci.co.uk/news/health/rss.xml"); xDoc.Descendants("item") .Where(item => !item.Element("title").Value.StartsWith("VIDEO")) .ToList() .ForEach(item=>item.Remove()); xDoc.Save("NewXmlDoc.xml"); 

您也可以使用XPath

 foreach (var item in xDoc.XPathSelectElements("//item[not(starts-with(title,'VIDEO:'))]") .ToList()) { item.Remove(); }