2011-07-23 166 views
1

我有這個xml。用LINQ解析XML元素

<?xml version="1.0" encoding="utf-8"?> 
<feed xml:lang="el-gr" xmlns="http://www.w3.org/2005/Atom"> 
<title type="text">name.gr</title> 
<updated>2011-07-23</updated> 
<link href="link" /> 
<entry>  
    <title type="html">Οι επιθέσεις σε σκανδιναβικές χώρες</title> 
    <summary type="text">Η Νορβηγία, μία από τις σκανδιναβικές χώρες, έζησε μετά από πάρα πολλά χρόνια (2006) τον τρόμο. Δείτε αναλυτικά τις τελευταίες «τυφλές» επιθέσεις τα τελευταία χρόνια:...</summary> 
    <published>2011-07-23T12:54:00+03:00</published>  
    <link href="link" /> 
</entry> 

我想解析一些裏面的元素。爲此,我使用以下LINQ代碼。

var list = from y in xelement.Descendants("entry") 
      select new Update() 
      { 
       Title = y.Element("title").Value, 
       Pubdate = y.Element("published").Value, 
       Descr = y.Element("content").Value, 
       Link = y.Element("link").Attribute("href").Value 
      }; 

但它不起作用。誰能告訴我我做錯了什麼?

+0

您正在嘗試檢索XML中不存在的名爲* content *的元素,是不是應該是* summary *? – James

回答

1

節點全部位於http://www.w3.org/2005/Atom命名空間中。因此,您需要使用此名稱空間爲查詢添加前綴,否則查詢會嘗試在空名稱空間中查找這些元素。

XNamespace atom = "http://www.w3.org/2005/Atom"; 
var list = from y in xelement.Descendants(atom+"entry") 
       select new Update() 
       { 
        Title = y.Element(atom+"title").Value, 
        Pubdate = y.Element(atom+"published").Value, 
        Descr = y.Element(atom+"content").Value, 
        Link = y.Element(atom+"link").Attribute("href").Value 
       }; 
+0

是不是隻適用於每個XML元素都標有適當的NS前綴?例如''。 – James

+0

否。根XML元素('feed')使用'xmlns'屬性重新定義空白/默認名稱空間前綴。因此,所有定義了'xmlns'的元素都在該名稱空間中(除非重新定義)。 – Lucero

0

在您的XML示例中,缺少「feed」尾標並且您使用的是元素「content」,但我猜「摘要」是正確的。