2013-02-28 100 views
1

我有這個結構的XML格式(現實世界的例子是窘況長期和複雜的,但是這應該說明它):解析嵌套的XML使用的XDocument

<document> <post> 
     <author>Bill Smith</author> 
     <subject>Test Article</subject> 
     <dates> 
      <uploaded>some date</uploaded> 
      <published>some date</published> 
     </dates> 
    </post> 
    <post> 
     <author>Bill Smith</author> 
     <subject>Test Article</subject> 
     <dates> 
      <uploaded>some date</uploaded> 
      <published>some date</published> 
     </dates> 
    </post> </document> 

我已經寫了一個簡單的查詢退出每個帖子。我可以得到作者和主題很好,但我不知道如何深入到日期部分來取出發佈的位。

謝謝

+0

您使用的是xpath嗎? – jhewlett 2013-02-28 03:36:23

回答

3

您可以使用以下LINQ獲取第一個「發佈」元素。

XDocument document = XDocument.Load(@"D:\XMLFile1.xml", LoadOptions.None); 
    XElement element = document 
    .Descendants("document") 
      .Descendants("post") 
    .Descendants("dates") 
    .Descendants("published") 
    .First(); 
string publishedDate = element.Value; 

您可以給任何表達式作爲'Descendants'方法的參數。 如果你有XML作爲一個字符串,可以使用以下讀取到的XDocument

XDocument.Parse(); 

請記住要檢查空值! :-)

+0

謝謝詹姆斯,我最終自己弄明白了。起初我沒有意識到,你可以像這樣連鎖後代()。 – 2013-02-28 12:25:55

+1

@MartinAlderson如果您還沒有注意到,如果該路徑上沒有元素返回'First()'會拋出錯誤,那麼使用'FirstOrDefault()'可能會更好。 – 2013-02-28 14:52:10