2011-01-28 65 views
0

我想從我的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", ""); 
          } 

回答

0

這是一個命名空間問題。

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

代碼xmlns="BLA"在你的根元素定義了URI 「BLA」 默認命名空間。因此,如果元素名稱沒有名稱空間前綴,則此元素及其後代屬於默認名稱空間「BLA」。如果它使用默認名稱空間,因爲沒有名稱空間前綴,很容易忘記某個元素位於某個名稱空間中。請注意,默認名稱空間不適用於屬性,僅適用於元素。

XPath使用擴展名稱(即:名稱對由名稱空間&本地名稱組成),並且如果XPath表達式中的元素名稱沒有名稱空間前綴,它將選擇不屬於任何元素的元素命名空間。要使用XPath選擇屬於某個名稱空間的元素,需要聲明該名稱空間URI,將其綁定到前綴,然後在您的XPath表達式中使用此前綴:元素名組合。

命名空間是XML中的一個基本概念。如果您不熟悉命名空間,請花時間學習並理解它們。