2011-10-10 82 views
1

我解析XML文檔以提取第一個出現的「內容」節點並讀取該節點的內部文本。在XML文檔中選擇節點的問題 - 返回NULL

進來的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'循環。

感謝您的任何幫助。

+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); 

此外,參照根節點的時候,你應該使用/,而不是//

0

您可以使用 thisXmlDoc.GetElementsByTagName("content"); 代替thisXmlDoc.SelectNodes("//feed/entry/content");