2010-10-13 43 views
2

這是我在這裏的第一篇文章 - 通常我會發現在這款主板某處的答案 - 但不是今天:-(XDocument.Descendants(ITEMNAME) - 問題找到合格的名稱

好:I,M試圖從網站讀取XML的RSS源。因此我使用的是異步下載並創建一個 的XDocument與XDocument.Parse()方法

文檔打算很簡單,就像這樣:。

<root> 
    <someAttribute></SomeAttribute> 
    <item>...</item> 
    <item>...</item> 
</root> 

現在我想讀出所有的項目,所以我試過:

foreach (XElement NewsEntry in xDocument.Descendants("item")) 

但這不起作用。所以我發現在這款主板使用合格的名稱後,因爲有根元素定義了一些命名空間:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns="http://purl.org/rss/1.0/"> 

好,我嘗試了所有3個可用的命名空間 - 沒有什麼工作對我來說:

XName itemName = XName.Get("item", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); 
XName itemName2 = XName.Get("item", "http://purl.org/dc/elements/1.1/"); 
XName itemName3 = XName.Get("item", "http://purl.org/rss/1.0/modules/syndication/"); 

任何幫助將非常酷。 (通常我正在用正則表達式進行XML分析 - 但這次我正在開發一個移動設備,所以應該注意性能。)

回答

3

您還沒有嘗試過default namespacerdf聲明:

xmlns="http://purl.org/rss/1.0/" 

這是有道理的,因爲在默認命名空間中的任何元素將不再需要在後面附加元素名稱的命名空間。

+0

是啊,這就是它 - 一個解決方案,我沒有想到的。 Thx非常。 – dognose 2010-10-13 13:48:20

+0

@ dognose - 沒問題。將欣賞一個upvote和你接受的答案;) – Oded 2010-10-13 13:52:32

0

試試這個

var elements = from p in xDocument.Root.Elements() 
where p.Name.LocalName == "item" 
select p; 

foreach(var element in elements) 
{ 
//Do stuff 
}