2013-08-27 93 views
1

我試圖提取<str>標籤從內容:XML內容提取C#

<lst name="Stack"> 
    <lst name="Overflow"> 
    <arr name="content"> 
     <str>Help</str> 
    </arr> 
    </lst> 
</lst> 

的代碼。我正在使用C#是:

txtResponse.Text += xDoc.Descendants("lst") 
     .Where(f => (string) f.Attribute("name") == "Overflow") 
     .Descendants("arr") 
     .Descendants("str") 
     .Select(b => b.Value); 

但它返回到我

System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String] 

什麼是我的問題?

+2

已經有您以前的問題的答案:http://stackoverflow.com/questions/18462349/parsing-xml- content-c-sharp – MarcinJuraszek

+0

上一個問題是類似的,但有細微的差別 –

回答

2

該代碼返回元素的集合(即枚舉),而不是單個元素。在你的情況下,實際上是IEnumerable<string>,即「字符串列表」。 Text屬性需要一個字符串。

從您的問題中不清楚txtResponse的內容應該是什麼樣子,但您可以這樣做。

var result = xDoc.Descendants("lst") 
     .Where(f => (string) f.Attribute("name") == "Overflow") 
     .Descendants("arr") 
     .Descendants("str") 
     .Select(b => b.Value); 

    txtResponse.Text = string.Join(", ", result); 
+0

這很好用,謝謝 –

0

,如果你只需要第一個記錄,你只需要這個

txtResponse.Text += xDoc.Descendants("lst") 
        .Where(f => (string) f.Attribute("name") == "Overflow") 
        .Descendants("arr") 
        .Descendants("str") 
        .Select(b => b.Value) 
        .FirstorDefault(); 
+0

'+ ='不能用於輸入'字符串'和'方法組'錯誤 –

+0

我剛剛測試過這個並且工作正常。 – Ehsan