我想从我的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 :(得分:0)
这是命名空间问题。
<PriceList ID="003" xmlns="BLA">
根元素中的代码xmlns="BLA"
定义了一个URI为“BLA”的默认命名空间。因此,如果元素名称没有名称空间前缀,则此元素及其后代属于默认名称空间“BLA”。如果元素使用默认命名空间,则很容易忘记元素在某个命名空间中,因为没有命名空间前缀。请注意,默认命名空间不适用于属性,仅适用于元素。
XPath使用扩展名称(即:由名称空间和本地名称组成的名称对),如果XPath表达式中的元素名称没有名称空间前缀,则选择不属于任何名称的元素命名空间。要使用XPath选择属于某个命名空间的元素,您需要声明该命名空间URI,将其绑定到前缀,然后在XPath表达式中使用此前缀:element-name组合。
命名空间是XML中的一个基本概念。如果您不熟悉命名空间,请花些时间学习和理解命名空间。