XPathNavigator クラスには、2 つのナビゲーション メソッドのセットが用意されています。最初のセットは、「XPathNavigator を使用したノード セット のナビゲーション」トピックで見つかったセットで、XPathDocumentまたはXmlDocument オブジェクト内のノード セット間を移動するために使用されます。 このトピックで説明する 2 番目のセットは、XPathDocumentまたはXmlDocument オブジェクト内の属性ノードと名前空間ノード間を移動するために使用されます。
属性ノードのナビゲーション
属性は要素のプロパティであり、要素の子ではありません。 兄弟ノード、親ノード、および子ノード間を移動するために使用される XPathNavigator クラスのメソッドにより、この区別が重要です。
たとえば、 MoveToPrevious メソッドと MoveToNext メソッドは、要素から属性への移動や属性間の移動には使用されません。 代わりに、属性には個別のナビゲーション メソッドがあります。
XPathNavigator クラスの属性ナビゲーション メソッドを次に示します。
現在のノードが要素である場合は、 HasAttributes プロパティを使用して、要素に関連付けられている属性があるかどうかを確認できます。 要素に属性が含まれることがわかっている場合は、属性にアクセスするための複数のメソッドがあります。 要素から 1 つの属性を取得するには、 GetAttribute メソッドを使用します。 XPathNavigatorを特定の属性に移動するには、MoveToAttribute メソッドを使用します。 MoveToFirstAttribute メソッドを使用し、その後に MoveToNextAttribute メソッドを複数呼び出すことで、要素の各属性を反復処理することもできます。
注
XPathNavigator オブジェクトが属性または名前空間ノードに配置されている場合、MoveToChild、MoveToFirst、MoveToFirstChild、MoveToFollowing、MoveToId、MoveToNext、MoveToPreviousのメソッドは常にfalse
を返し、XPathNavigatorの位置には影響しません。 例外は、 MoveTo、 MoveToParent、および MoveToRoot メソッドです。
名前空間ノードのナビゲーション
各要素には、名前空間ノードのセットが関連付けられています。1 つは、その要素のスコープ内の名前空間 URI にバインドされている名前空間プレフィックスごとに 1 つ (すべての XML ドキュメントで暗黙的に宣言される http://www.w3.org/XML/1998/namespace
名前空間にバインドされた XML プレフィックスを含む) と、既定の名前空間 (要素のスコープ内にある場合) に 1 つです。 要素は、これらの各名前空間ノードの親です。ただし、名前空間ノードは親要素の子ではありません。
属性と同様に、 MoveToPrevious メソッドと MoveToNext メソッドは、要素から名前空間ノードへの移動や名前空間ノード間の移動には使用されません。 代わりに、名前空間ノードには個別のナビゲーション メソッドがあります。
XPathNavigator クラスの名前空間ナビゲーション メソッドを次に示します。
XML ドキュメント内の任意の要素のスコープには、常に少なくとも 1 つの名前空間ノードがあります。 これは、プレフィックス 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 列挙
名前空間ノード内を移動する場合、XPathNamespaceScope パラメーターを使用してMoveToFirstNamespaceメソッドとMoveToNextNamespace メソッドを呼び出すことができます。 これらのメソッドの動作は、パラメーターなしで呼び出される対応するメソッドとは異なります。 XPathNamespaceScope列挙には、All、ExcludeXml、またはLocalの値があります。
次の例は、XML ドキュメントのさまざまなスコープで MoveToFirstNamespace メソッドと MoveToNextNamespace メソッドによって返される名前空間を示しています。
<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 は基本的に現在のスコープ内の最後の名前空間ノードに移動します。
次の例は、XML ドキュメントのさまざまなスコープで指定されたXPathNamespaceScope列挙体を使用して、MoveToFirstNamespace メソッドと MoveToNextNamespace メソッドによって返される名前空間を示しています。
<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
に配置すると、名前空間シーケンス (MoveToFirstNamespace メソッドを呼び出した後、MoveToNextNamespace メソッドの一連の呼び出しが続いた後にXPathNavigatorが配置される名前空間) は次のようになります。
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 は基本的に現在のスコープ内の最後の名前空間ノードに移動します。
こちらも参照ください
.NET