Как я могу получить атрибут из корня в XML-файле с XPathNavigator? - PullRequest
0 голосов
/ 28 января 2011

Я хотел бы получить атрибут из моего 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", "");
                            }

1 Ответ

0 голосов
/ 28 января 2011

Это проблема пространства имен.

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

Код xmlns="BLA" в вашем корневом элементе определяет пространство имен по умолчанию с URI "BLA". Таким образом, этот элемент и его потомки принадлежат пространству имен по умолчанию "BLA", если имя элемента не имеет префикса пространства имен. Легко забыть, что элемент находится в некотором пространстве имен, если он использует пространство имен по умолчанию, потому что нет префикса пространства имен. Обратите внимание, что пространство имен по умолчанию не применяется к атрибутам, только к элементам.

XPath работает с расширенными именами (то есть парой имен, состоящей из пространства имен и локального имени), и если имя элемента в вашем выражении XPath не имеет префикса пространства имен, он выбирает элементы, которые не принадлежат ни одному пространству имен , Чтобы использовать XPath для выбора элементов, принадлежащих некоторому пространству имен, вам необходимо объявить этот URI пространства имен, связать его с префиксом, а затем использовать эту комбинацию префикс: имя элемента в вашем выражении XPath.

Пространства имен являются фундаментальной концепцией в XML. Если вы не знакомы с пространствами имен, пожалуйста, найдите время, чтобы изучить и понять их.

...