2010-07-04 73 views
1

圖片刮XML時,我有這樣的XML:獲取錯誤信息的LINQ

<ipb> 
    <profile> 
     <id>335389</id> 
     <name>stapia.gutierrez</name> 
     <rating>0</rating> 
    </profile> 
</ipb> 

我試圖讓ID,名稱和等級。任何指導?

這裏是我有什麼,我得到:

public User FindInformation() 
{ 
    string xml = new WebClient().DownloadString(String.Format("http://www.dreamincode.net/forums/xml.php?showuser={0}", userID)); 
    XDocument doc = XDocument.Parse(xml); 

    var id = from u in doc.Descendants("profile") 
       select (string)u.Element("id"); 

    var name = from u in doc.Descendants("profile") 
       select (string)u.Element("name"); 

    var rating = from u in doc.Descendants("profile") 
       select (string)u.Element("rating"); 

    User user = new User(); 
    user.ID = id.ToString(); 
    user.Name = name.ToString(); 
    user.Rating = rating.ToString(); 

    return user; 
} 

這是我在我的文本框用於測試目的得到。

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

回答

1

你需要提取的<profile>一個實例,然後在該操作:

XDocument doc = XDocument.Parse(xml); 

foreach(var profile in doc.Descendants("profile")) 
{ 
    var id = profile.Element("id").Value; 
    var name = profile.Element("name").Value; 
    var rating = profile.Element("rating").Value; 

    User user = new User(); 
    user.ID = id; 
    user.Name = name; 
    user.Rating = rating; 
} 

你現在正在做的是選擇(doc.Descendants("profile")節點列表將返回節點列表,可能只有一個元素 - 但仍然是一個列表),然後是該列表中的所有「id」元素....不是我想要的!

+0

謝謝,這正是我所需要的。還沒有用過很多XML。 :] – 2010-07-04 19:24:15

+0

別擔心我總是這樣做。計時器有8分鐘才能接受。 – 2010-07-04 19:50:21

+0

系統需要一段時間才能通過aswer標記回答。不要跳槍。 – 2010-07-04 19:50:35

0
var id = from u in doc.Descendants("profile") 
select (string)u.Element("id"); 

這&等之類的語句,這些將返回一個枚舉&不是一個具體的實例。 即發生什麼事,如果你的XML有許多節點滿足條件?因此,如果您希望獲得第一個項目(或者如果您的xml結構完全如上所示,並且沒有額外的節點),則撥打FirstFirstOrDefault應該有所幫助。