2010-07-04 2 views
1

image Je possède ce XML:Obtenir des informations mal quand XML grattage avec Linq

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

J'essaie d'obtenir ID, Nom et Note. Des conseils?

Voici ce que j'ai et ce que je reçois:

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; 
} 

C'est ce que je reçois dans mon TextBox à des fins de test.

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] 

Répondre

1

Vous devez extraire une seule instance de <profile> et fonctionnent sur ce point:

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; 
} 

Ce que vous faites est maintenant la sélection d'une liste de noeuds (doc.Descendants("profile") retourne une liste de nœuds, peut-être avec un seul élément - mais toujours une liste), et puis tous les éléments "id" de l'intérieur de cette liste .... pas vraiment ce que vous voulez, je suppose!

+0

Merci, c'est exactement ce dont j'avais besoin. Je n'ai pas beaucoup travaillé avec XML. :] –

+0

Ne vous inquiétez pas, je le fais toujours. La minuterie a 8 minutes avant que je puisse accepter. –

+0

Le système a besoin d'un certain temps avant de pouvoir répondre à une réponse. Ne saute pas le pistolet. –

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

Cette & d'autres déclarations comme celles-ci vous renverra une & dénombrable pas une instance spécifique. c.-à-d. Que se passe-t-il si votre fichier XML contient plusieurs nœuds répondant à la condition? Donc, si vous cherchez à obtenir le premier élément (ou si vous avez une structure xml exactement comme indiqué ci-dessus sans nœuds supplémentaires), un appel à First ou FirstOrDefault devrait aider.