选择XML中的节点

时间:2014-03-16 14:45:38

标签: c# xml xpath

我试图在c#

中使用xpath选择节点

这是我的XML文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
    <channel>
        <title>Some other title</title>
        <item>
            <description><![CDATA[<img src="http://www.site.com/image.jps"/><br />]]></description>

        </item>
        <item>
            <title>This title</title>
            <subtitle><subtitle>
            <Date>Fri, 21 Mar 2014 08:30:44 GMT</Date>
            <description>Some description</description>
        </item>
        <item>
            <title>The other title</title>
            <subtitle><subtitle>
            <Date>Fri, 21 Mar 2014 08:30:44 GMT</Date>
            <description>The other description</description>
        </item>
    </channel>
</rss>

到目前为止,这是我的错误代码:

            // Load the document and set the root element.
            XmlDocument doc = new XmlDocument();
            doc.Load("file.xml");

            // Select nodes
            XmlNode root = doc.DocumentElement;
            XmlNodeList nodeList = root.SelectNodes("/channel/item/");

            foreach (XmlNode xn in nodeList)
            {
                string fieldLine = xn["Title"].InnerText;
                Console.WriteLine("Title: ", fieldLine);
            }

我想输出&#34;标题&#34;来自&#34; item&#34;像这样:

This title
The other title

如果您知道如何操作,请告诉我

3 个答案:

答案 0 :(得分:2)

我建议您使用Linq to Xml

var xdoc = XDocument.Load("file.xml");
var titles = from i in xdoc.Root.Element("channel").Elements("item")
             select (string)i.Element("title");

或者使用XPath:

var titles = xdoc.XPathSelectElements("rss/channel/item/title")
                 .Select(t => (string)t);

返回IEnumerable<string>标题。

foreach (string title in titles)
    Console.WriteLine("Title: {0}", title); // note item placeholder in format

答案 1 :(得分:1)

您只是错过了rss root的完整路径:

XmlNodeList nodeList = root.SelectNodes("/rss/channel/item[title]/");
foreach(...)

(由于并非所有<item>都有标题,因此不包括标题。 另请注意,xml区分大小写:

string fieldLine = xn["title"].InnerText;

答案 2 :(得分:1)

请考虑以下几点,您将获得所需的输出..

1)您发布的问题中的字幕缺少结束标记,请输入&#39; /&#39;在结束标记

2)您非常接近正确的代码,请将其替换为:

        XmlDocument doc = new XmlDocument();
        doc.Load("file.xml");

        XmlNodeList nodeList = doc.SelectNodes("rss/channel/item/title");

        foreach (XmlNode xn in nodeList)
        {
            Console.WriteLine("Title: {0}", xn.InnerText);
        }