Nodnavigering för attribut och namnområde med XPathNavigator
Klassen XPathNavigator innehåller två uppsättningar navigeringsmetoder, den första uppsättningen, som finns i avsnittet Noduppsättningsnavigering med hjälp av XPathNavigator , används för att navigera i noduppsättningar i ett XPathDocument eller XmlDocument -objekt. Den andra uppsättningen, som beskrivs i det här avsnittet, används för att navigera i attribut- och namnområdesnoder i ett XPathDocument eller XmlDocument -objekt.
Attributnodnavigering
Attribut är egenskaper för ett element, inte underordnade element. Den här skillnaden är viktig på grund av metoderna i klassen XPathNavigator som används för att navigera i syskon-, över- och underordnade noder.
Metoderna och MoveToNext används till exempel MoveToPrevious inte för att navigera från ett element till ett attribut eller mellan attribut. Attribut har i stället distinkta navigeringsmetoder.
Följande är attributnavigeringsmetoderna för XPathNavigator klassen.
När den aktuella noden är ett element kan du använda HasAttributes egenskapen för att se om det finns några attribut som är associerade med elementet. När det är känt att ett element har attribut finns det flera metoder för att komma åt attribut. Om du vill hämta ett enda attribut från elementet använder du GetAttribute -metoden. Om du vill flytta XPathNavigator till ett visst attribut använder du MoveToAttribute -metoden. Du kan också iterera över varje attribut för ett element med hjälp MoveToFirstAttribute av metoden följt av flera anrop till MoveToNextAttribute metoden.
Kommentar
XPathNavigator När objektet placeras på ett attribut eller en namnområdesnod MoveToChildreturnerar false
metoderna , MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToIdMoveToNext och MoveToPrevious alltid , och har ingen effekt på positionen för XPathNavigator. Undantagen MoveToär metoderna , MoveToParentoch MoveToRoot .
Nodnavigering för namnområde
Varje element har en associerad uppsättning namnområdesnoder, ett för varje distinkt namnområdesprefix som är bundet till en namnområdes-URI i omfånget för elementet (inklusive XML-prefixet som är bundet till http://www.w3.org/XML/1998/namespace
namnområdet, som implicit deklareras i varje XML-dokument) och ett för standardnamnområdet om ett finns i omfånget för elementet. Elementet är överordnat för var och en av dessa namnområdesnoder. En namnområdesnod är dock inte underordnad dess överordnade element.
Precis som med attribut MoveToPrevious används metoderna och MoveToNext inte för att navigera från ett element till en namnområdesnod eller mellan namnområdesnoder. I stället har namnområdesnoder distinkta navigeringsmetoder.
Följande är namnområdesnavigeringsmetoderna för XPathNavigator klassen.
Det finns alltid minst en namnområdesnod i omfånget för ett element i ett XML-dokument. Det här är namnområdesnoden med prefixet xml
och namnområdes-URI http://www.w3.org/XML/1998/namespace
:n . Om du vill hämta en namnområdes-URI i omfånget med ett visst prefix använder du GetNamespace metoden. Om du vill flytta objektet XPathNavigator till en viss namnområdesnod använder du MoveToNamespace metoden . Du kan också iterera över varje namnområdesnod i omfånget för ett element med hjälp MoveToFirstNamespace av metoden följt av flera anrop till MoveToNextNamespace metoden.
Kommentar
XPathNavigator När objektet placeras på ett attribut eller en namnområdesnod MoveToChildreturnerar false
metoderna , MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToIdMoveToNext och MoveToPrevious alltid , och har ingen effekt på positionen för XPathNavigator. Undantagen MoveToär metoderna , MoveToParentoch MoveToRoot .
XPathNamespaceScope-uppräkning
När du navigerar i namnområdesnoder MoveToFirstNamespace kan metoderna och MoveToNextNamespace anropas med en XPathNamespaceScope parameter. Dessa metoder fungerar annorlunda än deras motsvarigheter som anropas utan parametrar. Uppräkningen XPathNamespaceScope har värden för All, ExcludeXmleller Local.
I följande exempel visas vilka namnområden som returneras av MoveToFirstNamespace metoderna och MoveToNextNamespace i olika omfång i ett XML-dokument.
<root>
<element1 xmlns="http://www.contoso.com" xmlns:books="http://www.contoso.com/books">
<element2 />
</element1>
</root>
Namnområdessekvensen (namnområdet som XPathNavigator placeras efter att metoden anropats MoveToFirstNamespace följt av en serie anrop till MoveToNextNamespace metoden) är följande.
När du är placerad på
element2
:xmlns:books="http://www.contoso.com/books"
,xmlns="http://www.contoso.com"
ochxmlns:xml="http://www.w3.org/XML/1998/namespace"
.När du är placerad på
element1
:xmlns:books="http://www.contoso.com/books"
,xmlns="http://www.contoso.com"
ochxmlns:xml="http://www.w3.org/XML/1998/namespace"
.När du är placerad på
root
:xmlns:xml="http://www.w3.org/XML/1998/namespace".
Kommentar
Klassen XPathNavigator returnerar namnområdesnoder i omvänd dokumentordning. Därför MoveToFirstNamespace flyttas i princip till noden för efternamnsområdet i det aktuella omfånget.
I följande exempel visas vilka namnområden som returneras av MoveToFirstNamespace metoderna och MoveToNextNamespace med uppräkningen XPathNamespaceScope som anges i olika omfång i ett XML-dokument.
<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>
När den är placerad på child2
är namnområdessekvensen (namnområdet XPathNavigator som placeras efter att metoden anropats MoveToFirstNamespace följt av en serie anrop till MoveToNextNamespace metoden) följande.
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"
ochxmlns: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"
ochxmlns="http://www.contoso.com"
.Local:
xmlns:c="urn:c"
.
Kommentar
Klassen XPathNavigator returnerar namnområdesnoder i omvänd dokumentordning. Därför MoveToFirstNamespace flyttas i princip till noden för efternamnsområdet i det aktuella omfånget.