我还有另一个我无法完成的任务:我应该从this site解析XML,删除名称中没有“VIDEO”的所有节点,然后将其保存到另一个XML文件。我对阅读和写作没有任何问题,但删除会给我带来一些困难。我试过做Node - >父节点 - >子节点工作很麻烦,但似乎没用:
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();
}
请问你能帮帮我吗?
答案 0 :(得分:2)
我发现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();
}