2011-01-28 4 views
0

Je voudrais obtenir un attribut de mon fichier xml. L'attribut est sur ma racine. Voir ici un exemple:Comment puis-je obtenir un attribut de la racine dans un fichier xml avec XPathNavigator?

<PriceList ID="003" xmlns="BLA"> 
    <Items> 
    <Item ID="AAK0435"> 
     <RetailPrice currency="EUR">1.6</RetailPrice> 
    </Item> 
    <Item ID="AAL0144"> 
     <RetailPrice currency="EUR">1470</RetailPrice> 
    </Item> 
    </Items> 
</PriceList> 

Je voudrais obtenir l'attribut "ID" à la racine. J'ai essayé quelque chose comme ça, mais il ne vient pas dans la boucle foreach.

XPathDocument xPriceDocument = new XPathDocument(priceList.FullName, XmlSpace.None); 
          XPathNavigator xPriceNavigator = xPriceDocument.CreateNavigator(); 

          foreach (XPathNavigator xPriceListIdNavigator in xPriceNavigator.Select("PriceList")) 
          { 
           priceListId = xPriceListIdNavigator.GetAttribute("ID", ""); 
          } 

Répondre

0

Il s'agit d'un problème d'espace de noms.

<PriceList ID="003" xmlns="BLA"> 

code xmlns="BLA" dans votre élément racine définit un espace de noms par défaut avec l'URI "BLA". Ainsi cet élément et ses descendants appartiennent à l'espace de noms par défaut "BLA" si le nom de l'élément n'a pas de préfixe d'espace de nommage. Il est facile d'oublier qu'un élément est dans un espace de nom, s'il utilise l'espace de nom par défaut, car il n'y a pas de préfixe d'espace de nommage. Notez que l'espace de nom par défaut ne s'applique pas aux attributs, seulement aux éléments. XPath fonctionne avec des noms étendus (c'est-à-dire: une paire de noms constituée d'un espace de noms &) et si un nom d'élément dans votre expression XPath n'a pas de préfixe d'espace de nommage, il sélectionne les éléments qui n'appartiennent à aucun espace de nommage. Pour utiliser XPath pour sélectionner des éléments appartenant à certains espaces de noms, vous devez déclarer cet URI d'espace de noms, le lier à un préfixe, puis utiliser cette combinaison préfixe: nom-élément dans votre expression XPath.

Les espaces de noms sont un concept fondamental en XML. Si vous n'êtes pas familier avec les espaces de noms, prenez le temps de les apprendre et de les comprendre.

Questions connexes