我试图在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
如果您知道如何操作,请告诉我
答案 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);
}