2015-04-02 132 views
0

我試圖獲取所有條目元素,以便我可以顯示它們,但是我還沒有做過一段時間的Xpath,但我認爲它會相當簡單。到目前爲止 - rssNodes計數爲0,我錯過了什麼?使用XPath從XML獲取名稱空間中的所有條目元素

XmlDocument rssXmlDoc = new XmlDocument(); 
rssXmlDoc.Load("http://www.businessopportunities.ukti.gov.uk/alertfeed/1425362.rss"); 

var rssNodes = rssXmlDoc.SelectNodes("feed/entry"); 

XML文件的結構如下:

<?xml version="1.0" encoding="UTF-8"?> 
<feed xmlns="http://www.w3.org/2005/Atom"> 
    <!-- some other child elements --> 
    <entry> 
    <!-- child elements --> 
    </entry> 
    <entry> 
    <!-- child elements --> 
    </entry> 
    <!-- more entry elements --> 
    <!-- some other child elements --> 
</feed> 
+0

你能告訴你的XML? – 2015-04-02 11:42:34

+0

請點擊鏈接> http://www.businessopportunities.ukti.gov.uk/alertfeed/1425362.rss – 2015-04-02 11:44:01

+0

[哪個xpath表達式允許我選擇這些節點?](http://stackoverflow.com/問題/ 14370989/which-xpath-expression-will-allow-me-to-select-these-nodes) – JLRishe 2015-04-02 11:57:58

回答

3

您需要正確使用命名空間:

var nsm = new XmlNamespaceManager(rssXmlDoc.NameTable); 
nsm.AddNamespace("atom", "http://www.w3.org/2005/Atom"); 

var entries = rssXmlDoc.SelectNodes("/atom:feed/atom:entry", nsm); 
+0

謝謝!關鍵是命名空間....我需要做一些閱讀:-) – 2015-04-02 12:08:01

0

你需要尊重與XPath的XML命名空間。

注意:如果entry元素的名稱空間已知,請參閱JLRishe的答案,在這種情況下更優雅。

如果你不知道XML命名空間事先你也可以忽略使用它的XPath的內置local-name()功能:

SelectNodes("//*[local-name()='entry']") 

這將讓整個XML文檔中的所有元素entry,無論哪個元素所屬的名稱空間。