2010-07-28 10 views
1

Ce code ne peut pas lire un attribut spécifique - l'attribut name plus précisément. Au contraire, il lire le texte des éléments de noeud et fait un concat sur eux - résultat: 1F20 est ajouté à la listeC# ne peut pas lire l'attribut d'élément avec xpath

var reader = new StringReader(xml); 
      var xmlreader = new XmlTextReader(reader); 
      xmlreader.WhitespaceHandling = WhitespaceHandling.None; 
      var doc = new XPathDocument(xmlreader); 
      var nav = doc.CreateNavigator(); 
      XPathExpression expr = nav.Compile("/Area/Lights/Light[@Name]"); 
      XPathNodeIterator iterator = nav.Select(expr); 

      var list = new List<string>(); 
      while (iterator.MoveNext()) 
      { 
       XPathNavigator nav2 = iterator.Current.Clone(); 
       list.Add(nav2.Value); 
      } 

J'ai aussi essayé: XPathExpression expr = nav.Compile ("// Light [@ Prénom]");

qui retourne vide

C'est le xml que je suis en train de lire:

<Light Index="1" SetChannel="72" GetChannel="60" Name="y1 d1"> 
     <Nodes>1F</Nodes> 
     <Nodes>20</Nodes> 
    </Light> 

Qu'est-ce que je fais mal - première tentative de XPath ...

Répondre

3

est ce XML complet ? en utilisant votre extrait ici cela fonctionne

XPathExpression expr = nav.Compile("Light/@Name"); 

juste pour ajouter l'utilisation de XPathExpression expr = nav.Compile("/Area/Lights/Light[@Name]"); est un filtre, vous demandez un nœud léger qui a un attribut appelé nom, ou vous pouvez faire quelque chose comme @Name = 'bob' où vous demandez un Nœud lumineux avec un attribut de Nom égal à Bob

+0

Enlever le [] a fait l'affaire - Merci !! – lmkk

3

Vous essayez de lire tous les Light -éléments avec un Name -attribut.

Essayez //Light[@Name='xyz']/@Name afin de lire le Name -attribut du Light -Element où Name='xyz' ou //Light/@Name pour tous Name -attributes.

Rappelez-vous, [] est pour les conditions.

+0

Plus de copier et coller des erreurs que la grammaire, mais merci pour l'édition; D – atamanroman

+0

Je juste * dû * corriger le "Votre", il m'a donné la chair de poule. :RÉ – Tomalak

Questions connexes