2012-09-10 18 views
0

我想通過這個XML:的XElement迭代將無法正常工作

<result> 
    <diaryelement> 
     <diary_uid>86248040</diary_uid> 
     <diary_date>1347274789</diary_date> 
     <diary_type>0</diary_type> 

     <diaryshortitem> 
     <itemid>419</itemid> 
     <data>...</data> 
      <description>...</description> 
     </diaryshortitem> 
    </diaryelement> 
</result> 

,我使用了迭代的代碼是:

XElement diary = XElement.Parse(e.Result); 
IEnumerable<XElement> diaryelements = diary.Descendants("result"); 

Debug.WriteLine("No error"); 

       foreach (XElement diaryelement in diaryelements) 
       { 
        Debug.WriteLine(diaryelement.Value); 
        Debug.WriteLine((string)diaryelement.Element("diaryelement").Element("diaryshortitem").Element("description").Element("data").Value); 
       } 

Debug.WriteLine("Loop ended"); 

但是方法似乎跳過迭代我不知道爲什麼。

+0

你是什麼意思? – Clue

+0

「結果」不是後代。試試diary.DescendantsAndSelf。你會在循環中得到錯誤,但這會讓你進入循環,所以你可以從那裏去。 –

+0

當我與DescendantsAndSelf一起嘗試時,我得到一個空指針。即使當我從Element(「結果」)開始時,也是如此。 – Clue

回答

2
IEnumerable<XElement> diaryelements = diary.Descendants("diaryelement"); 

這種變化得到所有在此之後,「diaryelement」的後代,你可以分析一個個

+0

你是男人,朋友!如果你能告訴我爲什麼我的第一個實現不起作用,那將是很好的。 – Clue

+0

它就像你的第一個節點是「結果」指針已經存在,現在你下一個得到的是「diaryelement」的後代而不是「結果」。 –

0

而不是XElement.Parse嘗試使用XDocument.Parse。另外,還要考慮在這條線

Debug.WriteLine((string)diaryelement.Element("diaryelement").Element("diaryshortitem").Element("description").Element("data").Value); 

調整XML元素路徑 ,因爲它是不正確的。

+0

你的意思是缺少.Element(「名稱」)? – Clue

+0

我的意思是說'Element(「description」)'在你的xml中不包含子節點 – Alexander