如何使用XPathNavigator从xml文件的根中获取属性?

问题描述:

我想从我的xml文件中获取属性。该属性在我的根上。看到这里的一个例子:如何使用XPathNavigator从xml文件的根中获取属性?

<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> 

我想获得属性“ID”的根。我尝试了这样的事情,但他并没有进入foreach循环。

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

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

这是一个命名空间问题。

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

代码xmlns="BLA"在你的根元素定义了URI “BLA” 默认命名空间。因此,如果元素名称没有名称空间前缀,则此元素及其后代属于默认名称空间“BLA”。如果它使用默认名称空间,因为没有名称空间前缀,很容易忘记某个元素位于某个名称空间中。请注意,默认名称空间不适用于属性,仅适用于元素。

XPath使用扩展名称(即:名称对由名称空间&本地名称组成),并且如果XPath表达式中的元素名称没有名称空间前缀,它将选择不属于任何元素的元素命名空间。要使用XPath选择属于某个名称空间的元素,需要声明该名称空间URI,将其绑定到前缀,然后在您的XPath表达式中使用此前缀:元素名组合。

命名空间是XML中的一个基本概念。如果您不熟悉命名空间,请花时间学习并理解它们。