2011-03-13 4 views
0

Je récupère des données du service Web Guardian en utilisant C#. La réponse que je reçois est la chaîne XML qui est quelque chose comme çaRécupération des données de la chaîne xml

<results> 

<content> 

<fields> 

< field name="headlines"> This is headline < /field> 
< field name="text"> This is text < /field> 
<field name="url"> This is url < /field> 
< fields> 
< /content> 
< content> 
......... 
< /content> 
.... 
< results> 

Le problème est que tous les noeuds ayant des données ont le même nom qui est « champ ». Quand j'utilise ce code, il renvoie les données du premier nœud de champ, mais je veux que les données du champ soient nommées texte.

var head = xmlStories.Root.Descendants("fields").Select(results => new 
        { 
         Text = results.Element("field").Value, 


        }).ToList(); 

        foreach (var results in head) 
        { 



        text [h] = results.Text; 


         h = h + 1; 
        } 
+0

avez-vous essayé XML parser? –

Répondre

1

Que diriez-vous:

var fieldName = "text"; 
var text = 
    xmlStories 
    .Descendants("field") 
    .Where(e => e.Attribute("name").Value.Equals(fieldName)); 
0

Cela fonctionnerait:

var head = xmlStories.Descendants("field") 
        .Where(field =>(string)field.Attribute("name") == "text") 
        .Select(field => new 
         { 
         Text = (string)field, 
         }) 
        .ToList(); 

Notez la fonte à la chaîne dans l'état .Where(), cela couvre le cas où l'attribut name n'est pas présent du tout aussi bien. Si vous voulez juste une liste avec le contenu de cet attribut une chaîne que vous n'avez pas besoin d'une classe anonyme soit, plus courte serait:

var head = xmlStories.Descendants("field") 
        .Where(field =>(string)field.Attribute("name") == "text") 
        .Select(field => (string)field) 
        .ToList(); 

Ce serait une liste de chaînes.

Questions connexes