我正在解析一个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‘循环。
谢谢你的帮助。
发布于 2011-10-10 20:43:00
当对某些命名空间中的元素使用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);此外,在引用根节点时,您应该使用/而不是//。
发布于 2011-10-10 20:36:58
您可以使用thisXmlDoc.GetElementsByTagName("content");而不是thisXmlDoc.SelectNodes("//feed/entry/content");
https://stackoverflow.com/questions/7712671
复制相似问题