我正在解析XML文档以取出第一次出现的“content”节点并读取该节点的内部文本。
可以在以下位置看到进入的XML文件:
处理文件的代码是:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestToSend);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string responseString = sr.ReadToEnd();
XmlDocument thisXmlDoc = new XmlDocument();
thisXmlDoc.LoadXml(responseString);
//get Companies
XmlNodeList ocNodesCompany = thisXmlDoc.SelectNodes("//feed/entry/content");
foreach (XmlElement element in ocNodesCompany)
{
description = element.InnerText;
testOutput = "<b>" + stockRow["stockitem_text"].ToString() + "</b>: " + description + "<br /><br />";
break;
}
Response.Write(responseString + "<br /><br />" + testOutput);
不幸的是,即使XML文件正确传递,它也没有找到任何节点,因此返回NULL并且没有进入'foreach'循环。
感谢您的帮助。
答案 0 :(得分:2)
对某些命名空间中的元素使用XPath查询时,you have to declare and use namespace prefix。
以下代码有效:
var nsmgr = new XmlNamespaceManager(new NameTable());
nsmgr.AddNamespace("atom", "http://www.w3.org/2005/Atom");
XmlNodeList ocNodesCompany =
thisXmlDoc.SelectNodes("/atom:feed/atom:entry/atom:content", nsmgr);
此外,在引用根节点时,您应该使用/
而不是//
。
答案 1 :(得分:0)
你可以使用
thisXmlDoc.GetElementsByTagName("content");
而不是thisXmlDoc.SelectNodes("//feed/entry/content");