2010-11-16 23 views
1

下面的代碼來檢索內容標籤值:的LINQ to XML:問題與XML標籤結腸

var returnVerse = from item in xmlTreeVerse.Descendants("rss").Elements("channel").Elements("item") 
           select new VerseModel 
           { 
            Verse = item.Element("content").Value, 
            Url = "" 
           }; 

下面是XML文件:

<?xml version="1.0" ?> 
<rss version="2.0" 
        xmlns:dc="http://purl.org/dc/elements/1.1/" 
        xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" 
        xmlns:admin="http://webns.net/mvcb/" 
        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
        xmlns:content="http://purl.org/rss/1.0/modules/content/"> 

    <channel> 
    <title>text</title> 
    <link>text</link> 
    <item> 
     <title>text</title> 
     <content:encoded> 
     Text 
     </content:encoded> 
    </item> 
    </channel> 
</rss> 

我無法查詢「content:encode」,因爲查詢「:」運算符無效。請幫忙。

回答

0

而不是

item.Element("content").Value 

試試這個:

item.Element(XName.Get("encoded", "content")).Value 

如果item.Element()返回空在那裏,你可能需要使用它代替:

item.Element(XName.Get("encoded", "http://purl.org/rss/1.0/modules/content/")).Value 
+0

是的,沒有工作。 XName.Get的第二個參數是命名空間。 – contactmatt 2010-11-16 04:04:57

+0

啊,哎呀..好吧,換掉它們。 :)(我會編輯我的答案,這樣做。) – cdhowie 2010-11-16 04:08:10

4

那個 「冒號操作」 是一個名字空間。您還需要使用命名空間進行查詢。您可以使用命名空間是這樣的:

XNamespace content = XNamespace.Get("http://purl.org/rss/1.0/modules/content/"); 
Verse = item.Element(content + "encoded").Value 
1

這爲我工作,所以映射回content:encoded這個問題

var ns = XNamespace.Get(@"http://purl.org/rss/1.0/modules/content/"); 

var xelems = xmlDoc.Descendants().ToList(); 

nodes.ForEach(n => n.Element(XName.Get("encoded", ns.NamespaceName)).Value); 

var elems = from x in xelems 
    select x.Element(XName.Get("encoded", ns.NamespaceName)).Value 

如果你想快速測試這個工作在一個公共RSS提要,運行這段代碼在控制檯應用程序或LinqPad上在Gist這裏。