如何使用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中的一个基本概念。如果您不熟悉命名空间,请花时间学习并理解它们。