2010-11-14 26 views
1

我有一個XML文檔:Windows 7移動的Silverlight:LINQ到XML問題

<?xml version="1.0" encoding="utf-8"?> 
<feed xmlns="http://www.w3.org/2005/Atom"> 

    <title>blahblah</title> 
    <subtitle>blahblah.</subtitle> 
    <link href="blahblah"/> 
    <link href="blahblah"/> 
    <updated>blahblah</updated> 
    <author> 
    <name>blahblah</name> 
    </author> 
    <id>blahblah</id> 

    <entry> 
    <title>blahblah</title> 
    <content type="html"><![CDATA[&ldquo;some text.&rdquo;]]></content> 
    </entry> 
</feed> 

我想要得到的入口節點的內容信息,這裏是我的代碼:

var xmlTreeVal = XDocument.Load("myxml.xml"); 

     var returnVal = from item in xmlTreeVerse.Descendants("feed").Elements("entry") 
          select new VerseModel 
          { 
           Verse = item.Element("content").Value 
          }; 

XML文檔加載罰款(正如我可以告訴通過調試),但它一直拋出'沒有順序項目發現'的錯誤。如何找到「內容」節點信息?

回答

3

只要您的XML具有名稱空間(由xmlns屬性指示),則必須通過引用其名稱空間來引用這些元素。這是通過將名稱空間連接到元素名稱來完成的。

此外,您使用的xmlTreeVal但隨後引用xmlTreeVerse - 這可能不是問題,但它在你給出的代碼不一致。

試試這個:

var ns = xmlTreeVerse.Root.GetDefaultNamespace(); 
var returnVal = from item in xmlTreeVerse.Descendants(ns + "feed").Elements(ns + "entry") 
       select new 
       { 
        Verse = item.Element(ns + "content").Value 
       }; 
+0

謝謝!是否有一個特定的原因,你必須使用它?我已經讀過,你應該使用它來避免命名衝突,但我不知道你必須使用它。 – contactmatt 2010-11-14 04:40:32

+0

@contactmatt如果在XML中指定了它,則必須使用它。您可以使用'Where'子句作爲解決方法,如[本問題](http://stackoverflow.com/q/1145659)中所示,但它不如直接引用名稱空間那樣高效。如果您的XML沒有名稱空間,那麼您可以直接通過名稱查詢節點。 – 2010-11-14 04:53:48