2010-08-24 6 views
0

ici est mon xml:comment convertir requête LINQ to XML string []

<record> 
<id>12342</id> 
<name>xx</name> 
<blah1>asdfas</blah1> 
<blah2>asdfas</blah2> 
..... 
</record> 

Je voudrais obtenir toutes les valeurs et le mettre dans un tableau. i essayé ce qui suit, il retourne "12342xxasdfasasdfas" au lieu de "12342", "xx", "asdfas", "asdfas"

var q = record.Elements("record").Select(r=>r.Value); 
string[] array = q.ToArray(); 

je suis venu la solution en utilisant la boucle foreach, se demandant simplement si y a-t-il de meilleurs moyens de le faire?

var q2 = record.Descendants("record").Elements(); 
int length = Convert.ToInt32(q2.Count().ToString()); 
string[] array2 =new string[length]; 
int i = 0; 
       foreach (XElement e in q2) 
       { 
        array2[i] = e.Value; 
        i++; 
       } 

Répondre

0

Pour extraire tous les éléments de texte, recherchez les XText nœuds dans la structure et extraire leurs valeurs:

string[] array = record.DescendantNodes() 
         .Where(n => n.NodeType == XmlNodeType.Text) 
         .Select(n => ((XText) n).Value) 
         .ToArray(); 

Résultat dans votre exemple: « 12342 "," xx "," asdfas "," asdfas "," ... "

0

Essayez cette

string[] result = (from item in record.Descendants("record").Elements() 
        select item.Value).ToArray(); 
+0

Cela ne fonctionne que si le texte que nous cherchons est dans un signe de tête immédiat de l'enfant e de ''. Certes, l'exemple est comme ça, mais la question n'indique pas que cela devrait être limité de cette façon. – Timwi

+0

Je ne fais que répondre à la question en n'imaginant pas les choses qui pourraient être nécessaires – CRice