2

達成できないタスクがもう 1 つあります。このサイトから XML を解析し、名前に「VIDEO」が含まれていないすべてのノードを削除してから、別の XML ファイルに保存する必要があります。読み書きは問題ありませんが、脱ぐとちょっと大変です。ノード -> 親ノード -> 子ノードの回避策を試みましたが、役に立ちませんでした:

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

「VIDEO」条件を満たさないすべてのノードを削除するため、RemoveAll メソッドも試しましたが、うまくいきません。

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

私を手伝ってくれますか?

4

1 に答える 1

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();             
}
于 2013-05-04T17:26:43.917 に答える