在XML文档中选择节点的问题 - 返回NULL

时间:2011-10-10 12:22:37

标签: c# asp.net xml

我正在解析XML文档以取出第一次出现的“content”节点并读取该节点的内部文本。

可以在以下位置看到进入的XML文件:

https://www.googleapis.com/shopping/search/v1/public/products?key=AIzaSyAfaLdRHGKa5Rens--Vpw-KftdzWyxe2co&country=GB&q=5055277014187&alt=atom

处理文件的代码是:

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'循环。

感谢您的帮助。

2 个答案:

答案 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");