2011-04-18 5 views
2

C'est une tâche simple, mais je ne peux pas le faire fonctionner. Étant donné le code XML suivant:Comment obtenir un nœud par son nom?

<?xml version="1.0" encoding="UTF-8"?> 
<product> 
    <item1></item1> 
    <item2></item2> 
    <item3></item3> 
</product> 

Je voudrais obtenir tous les noeuds product. Après deux tentatives renvoie aucun noeuds, je ne vois pas pourquoi:

XDocument meteoDoc = XDocument.Load("data.xml"); 
foreach (var item in meteoDoc.Descendants("product")) {//...} 
foreach (var item in meteoDoc.Descendants().Where(x => x.Name == "product").Nodes()) {//...} 

qui suit, comme prévu, me retourner tous les nœuds:

foreach (var item in meteoDoc.DescendantNodes()) { //...} 

Thx pour tout Tipps, je ne vois pas le problème ...: -/

Répondre

4

Votre première tentative demande pour tous les Descendantsappeléproduct. Votre deuxième tentative consiste à trouver les nœuds enfants directs de tous les descendants appelés product.

Il est possible que cherche descendants dans l'élément racine ... si vous savez que l'élément racine est appelé product, vous pouvez simplement utiliser:

foreach (var item in meteoDoc.Root.Descendants()) 

(je ne peux pas tester votre code existant pour savoir exactement pourquoi il ne fonctionne pas pour vous en ce moment, j'ai peur)

Notez que Descendants ne trouvera que des éléments descendants -. si vous voulez que tous les descendants nœuds, vous avez besoin de la méthode DescendantNodes.

+0

Oui, le produit est en fait la racine dans ce cas, fonctionne très bien comme ça. – sl3dg3

1

Utilisez ceci:

XDocument meteoDoc = XDocument.Load("data.xml"); 
foreach (var item in meteoDoc.Root.Descendants()) 
{ 
    // ... 
} 
0

Essayez ceci:

 foreach (var item in meteoDoc.Descendants("product")) 
     { 
      foreach (var prod in item.Descendants()) 
      { 
       // do something 
      } 
     } 
0

J'ai fait quelques changements à XML, de cette manière, les données sont plus bien formé et je peux vous donner un morceau de code qui accomplir votre tâche.

static void Main(string[] args) 
    { 

     //Data.xml 
     /* 
     <?xml version="1.0" encoding="UTF-8"?> 
      <product> 
       <item> 
        <name>test</name> 
       </item> 
       <item> 
        <name>test2</name> 
       </item> 
       <item> 
        <name>test3</name> 
       </item> 
      </product> 
     */ 


     XDocument meteoDoc = XDocument.Load("data.xml"); 

     var result = from c in meteoDoc.Descendants("item") 
        select new { Name = c.Element("name").Value }; 

     foreach (var item in result) 
     { 
      Console.WriteLine(item.Name); 
     } 
+0

Je n'ai aucune influence sur les données que j'ai décrites puisqu'elles proviennent d'une tierce partie. thx de toute façon. – sl3dg3

Questions connexes