Поделиться через


Навигация по узлам атрибутов и пространств имен с помощью XPathNavigator

Класс XPathNavigator предоставляет два набора методов навигации, первый набор, найденный в разделе навигации по набору узлов с помощью XPathNavigator , используется для перемещения наборов узлов в объекте XPathDocument или XmlDocument объекте. Второй набор, описанный в этом разделе, используется для навигации по узлам атрибутов и пространства имен в объекте или XPathDocument.

Навигация по узлам атрибутов

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

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

Ниже приведены методы навигации атрибутов XPathNavigator класса.

Если текущий узел является элементом, можно использовать свойство HasAttributes, чтобы определить, имеются ли связанные с элементом атрибуты. После того как элемент имеет атрибуты, существует несколько методов для доступа к атрибутам. Чтобы получить один атрибут из элемента, используйте GetAttribute метод. Чтобы переместить объект XPathNavigator в определенный атрибут, используйте MoveToAttribute метод. Вы также можете выполнять итерацию по каждому атрибуту элемента с помощью MoveToFirstAttribute метода, за которым следует несколько вызовов MoveToNextAttribute метода.

Замечание

XPathNavigator Когда объект размещается на узле атрибута или пространства имен, методы MoveToChild, MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToId, MoveToNext и MoveToPrevious всегда возвращают false и не влияют на положение XPathNavigator. Исключение составляют методы MoveTo, MoveToParent и MoveToRoot.

Навигация узла пространства имен

Каждый элемент имеет связанный набор узлов пространства имен, по одному для каждого префикса пространства имен, привязанного к URI пространства имен в области элемента (включая префикс XML, привязанный к http://www.w3.org/XML/1998/namespace пространству имен, который неявно объявлен в каждом XML-документе) и один для пространства имен по умолчанию, если он находится в области элемента. Элемент является родительским элементом каждого из этих узлов пространства имен; Однако узел пространства имен не является дочерним элементом родительского элемента.

Как и при работе с атрибутами, методы MoveToPrevious и MoveToNext не используются для перемещения от элемента к узлу пространства имен или между узлами пространств имен. Вместо этого узлы пространства имен имеют различные методы навигации.

Ниже приведены методы навигации класса XPathNavigator по пространству имен.

Для любого элемента в XML-документе всегда существует по крайней мере один узел пространства имен. Это узел пространства имен с префиксом xml и URI пространства имен http://www.w3.org/XML/1998/namespace. Чтобы получить универсальный код ресурса (URI) пространства имен в пределах данной области видимости с определенным префиксом, используйте этот метод GetNamespace. Чтобы переместить XPathNavigator объект в определенный узел пространства имен, используйте MoveToNamespace метод. Вы можете также выполнить итерацию по каждому узлу пространства имен элемента в области, используя метод MoveToFirstNamespace, за которым следует несколько вызовов метода MoveToNextNamespace.

Замечание

XPathNavigator Когда объект размещается на узле атрибута или пространства имен, методы MoveToChild, MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToId, MoveToNext и MoveToPrevious всегда возвращают false и не влияют на положение XPathNavigator. Исключение составляют методы MoveTo, MoveToParent и MoveToRoot.

Перечисление XPathNamespaceScope

При навигации по узлам пространства имен можно вызывать эти методы MoveToFirstNamespace и MoveToNextNamespace с параметром XPathNamespaceScope. Эти методы ведут себя иначе, чем их аналоги, когда вызываются без параметров. Перечисление XPathNamespaceScope имеет значения All, ExcludeXmlили Local.

В следующих примерах показано, какие пространства имен возвращаются методами MoveToFirstNamespace и MoveToNextNamespace на различных уровнях в XML-документе.

<root>  
    <element1 xmlns="http://www.contoso.com" xmlns:books="http://www.contoso.com/books">  
        <element2 />  
    </element1>  
</root>  

Последовательность пространств имен (пространство имен, на котором располагается XPathNavigator, после вызова метода MoveToFirstNamespace, за которым следует последовательность вызовов метода MoveToNextNamespace) выглядит следующим образом.

  • При расположении на element2: xmlns:books="http://www.contoso.com/books", xmlns="http://www.contoso.com", и xmlns:xml="http://www.w3.org/XML/1998/namespace".

  • При расположении на element1: xmlns:books="http://www.contoso.com/books", xmlns="http://www.contoso.com", и xmlns:xml="http://www.w3.org/XML/1998/namespace".

  • Когда объект расположен на root: xmlns:xml="http://www.w3.org/XML/1998/namespace".

Замечание

Класс XPathNavigator возвращает узлы пространства имен в обратном порядке документа. Поэтому, по сути, MoveToFirstNamespace перемещается на узел последнего пространства имен в текущей области.

В следующих примерах показано, какие пространства имен возвращаются методами MoveToFirstNamespace и MoveToNextNamespace с перечислением XPathNamespaceScope, заданным в различных областях в XML-документе.

<root xmlns="http://www.contoso.com" xmlns:a="http://www.contoso.com/a" xmlns:b="http://www.contoso.com/b">  
    <child1 xmlns="" xmlns:a="urn:a">  
        <child2 xmlns:c="urn:c" />  
    </child1>  
</root>  

При перемещении на child2, последовательность пространства имен (пространство имен, которое XPathNavigator позиционируется после вызова метода MoveToFirstNamespace, и за которым следует серия вызовов метода MoveToNextNamespace) выглядит следующим образом.

  • All: xmlns:c="urn:c", xmlns:a="urn:a", xmlns="", xmlns:b="http://www.contoso.com/b", xmlns:a="http://www.contoso.com/a", xmlns="http://www.contoso.com" и xmlns:xml="http://www.w3.org/XML/1998/namespace".

  • ExcludeXml: xmlns:c="urn:c", xmlns:a="urn:a", xmlns="", xmlns:b="http://www.contoso.com/b", xmlns:a="http://www.contoso.com/a", и xmlns="http://www.contoso.com".

  • Local: xmlns:c="urn:c".

Замечание

Класс XPathNavigator возвращает узлы пространства имен в обратном порядке документа. Поэтому, по сути, MoveToFirstNamespace перемещается на узел последнего пространства имен в текущей области.

См. также