2011-07-23 57 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”,但我猜“摘要”是正确的。