2011-07-23 17 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名前空間にあります。したがって、クエリにこの名前空間の接頭辞を付ける必要があります。そうでない場合、クエリは空の名前空間の要素を検索しようとします。あなたのXMLの例では

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

、不足している「フィード」ENDTAGがあり、あなたが要素「コンテンツ」を使用しているが、私は「要約」は正しいと思います。

関連する問題