Почему я должен передать пустое пространство имен в XPathNavigator.GetAttribute? - PullRequest
4 голосов
/ 17 декабря 2009

С учетом следующей разметки XML:

<root xmlns="Demo">
    <child name="foo"/>
</root>

и XPathNavigator, расположенные на элементе <child>,

string withNs = navigator.GetAttribute("name", navigator.NamespaceURI);
string withoutNs = navigator.GetAttribute("name", "");

дает странные результаты: withNs пусто, withoutNs содержит foo.

Почему это? Я ожидал, что все будет наоборот, поскольку атрибут name должен находиться в пространстве имен Demo, как элемент child.

В документации MSDN не упоминается никакого магического значения передачи namespaceURI="", поэтому я предположил, что вам нужно передать реальный URI пространства имен атрибута.

1 Ответ

5 голосов
/ 17 декабря 2009

, поскольку атрибут name должен находиться в пространстве имен Demo, как элемент child.

Атрибуты не наследуют пространство имен элемента, к которому они принадлежат, согласно спецификации w3c, и поэтому вы получили те результаты, которые являются правильными.

Статья по теме: http://web.archive.org/web/20170118162309/http://www.xmlplease.com/attributexmlns

...