この記事では、Visual Basic 2005 または Visual Basic .NET の XPathNavigator
クラスを使用して XML 内を移動するためのサンプル 手順とサンプル コードについて説明します。
元の製品バージョン: Visual Basic 2005、Visual Basic .NET
元の KB 番号: 301111
まとめ
この詳細な記事では、XPathDocument
オブジェクトから作成されたXPathNavigator
オブジェクトを使用して拡張マークアップ言語 (XML) ドキュメント内を移動する方法について説明します。 このサンプルでは、XML データを含む XPathDocument
オブジェクトを読み込み、 XPathNavigator
オブジェクトをビューとしてデータに作成し、ドキュメント内を移動して XML を表示します。
この記事の Microsoft Visual C# バージョンについては、「 Visual C# を使用して XPathNavigator クラスを使用して XML ドキュメント内を移動するを参照してください。
要件
次の一覧では、必要な推奨ハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、およびサービス パックの概要を示します。
- Windows Server 2003、Windows 2000 Professional、Windows 2000 Server、Windows 2000 Advanced Server、または Windows NT 4.0 Server
- Visual Studio 2005 または Visual Studio .NET
この記事では、次のトピックについて理解していることを前提としています。
- XML の用語
- XML ファイルの作成と読み取り
- XML パス言語 (XPath) 構文
XPathNavigator クラスを使用して XML 内を移動する
Visual Studio 2005 または Visual Studio。 NET、Visual Basic 2005 または Visual Basic .NET コンソール アプリケーションを作成します。
Note
この例では、 Books.xmlという名前のファイルを使用します。 独自の Books.xml ファイルを作成することも、.NET Software Development Kit (SDK) クイック スタートに含まれているサンプルを使用することもできます。 クイック スタートがインストールされている場合、Books.xmlはフォルダーにあります。
\Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transformxml\VB
または、 サンプル XML ファイル (books.xml) にアクセスして、このファイルを取得することもできます。
このプロジェクトを作成したフォルダーの下にある
\Bin\Debug
フォルダーにBooks.xmlをコピーする必要があります。プロジェクトが
System.Xml
名前空間を参照していることを確認します。Xml
名前空間とXPath
名前空間でImports
ステートメントを使用して、後でコード内でこれらの名前空間の宣言を修飾する必要がないようにします。 他の宣言の前に、Imports
ステートメントを使用する必要があります。Imports System.Xml Imports System.Xml.XPath
適切な変数を宣言します。 XML ドキュメントを保持する
XPathDocument
オブジェクトと、XPath 式を評価してドキュメント内を移動するXPathNavigator
オブジェクトを宣言します。 XPath 式を保持する String オブジェクトを宣言します。 Module1 の Main プロシージャに宣言コードを追加します。Dim nav As XPathNavigator Dim docNav As XPathDocument
サンプル ファイル
Books.xml
を使用して、XPathDocument
オブジェクトを読み込みます。XPathDocument
クラスは、拡張スタイルシート言語変換 (XSLT) を使用して、XML ドキュメント処理用の高速でパフォーマンス指向のキャッシュを提供します。 これは XML ドキュメント オブジェクト モデル (DOM) に似ていますが、XSLT 処理と XPath データ モデル用に高度に最適化されています。'Open the XML. docNav = New XPathDocument("books.xml")
ドキュメントから
XPathNavigator
オブジェクトを作成します。XPathNavigator
を使用すると、XML ドキュメント内の属性ノードと名前空間ノードの両方を移動できます。'Create a navigator to query with XPath. nav = docNav.CreateNavigator
MoveToRoot
メソッドを使用してドキュメントのルートに移動します。MoveToRoot
は、ノードのツリー全体を含むドキュメント ノードにナビゲーターを設定します。'Initial XPathNavigator to start at the root. nav.MoveToRoot()
MoveToFirstChild
メソッドを使用して、XML ドキュメントの子に移動します。MoveToFirstChild
メソッドは、現在のノードの最初の子に移動します。Books.xml
ソースの場合、ルート ドキュメントから子、Comment
セクション、および Bookstore ノードに移動します。'Move to the first child node (comment field). nav.MoveToFirstChild()
MoveToNext
メソッドを使用して、兄弟レベルでノードを反復処理します。MoveToNext
メソッドは、現在のノードの次の兄弟に移動します。'Loop through all the root nodes. Do ... Loop While nav.MoveToNext
NodeType
プロパティを使用して、要素ノードのみを処理していることを確認し、Value
プロパティを使用して要素のテキスト表現を表示します。Do 'Find the first element. If nav.NodeType = XPathNodeType.Element Then 'If children exist. If nav.HasChildren Then 'Move to the first child. nav.MoveToFirstChild()'Loop through all the children. Do 'Display the data. Console.Write("The XML string for this child ") Console.WriteLine("is '{0}'", nav.Value) Loop While nav.MoveToNext End If End If Loop While nav.MoveToNext
ノードに属性があるかどうかを判断するには、
HasAttributes
プロパティを使用します。MoveToNextAttribute
などの他のメソッドを使用して、属性に移動してその値を調べることもできます。Note
このコード セグメントでは、ツリー全体ではなく、ルート ノードの子孫についてのみ説明します。
Do 'Find the first element. If nav.NodeType = XPathNodeType.Element Then 'if children exist If nav.HasChildren Then 'Move to the first child. nav.MoveToFirstChild()'Loop through all the children. Do 'Display the data. Console.Write("The XML string for this child ") Console.WriteLine("is '{0}'", nav.Value)'Check for attributes. If nav.HasAttributes Then Console.WriteLine("This node has attributes") End If Loop While nav.MoveToNext End If End If Loop While nav.MoveToNext
Console
オブジェクトのReadLine
メソッドを使用して、コンソールディスプレイの最後に一時停止を追加して、上記の結果をより簡単に表示します。'Pause. Console.ReadLine()
コンソール アプリケーション プロジェクトをビルドして実行します。
完全なコード リスト
Imports System.Xml
Imports System.Xml.XPath
Module Module1
Sub Main()
Dim nav As XPathNavigator
Dim docNav As XPathDocument
docNav = New XPathDocument("books.xml")
nav = docNav.CreateNavigator
nav.MoveToRoot()'Move to the first child node (comment field).
nav.MoveToFirstChild()
Do
'Find the first element.
If nav.NodeType = XPathNodeType.Element Then
'if children exist
If nav.HasChildren Then
'Move to the first child.
nav.MoveToFirstChild()'Loop through all the children.
Do
'Display the data.
Console.Write("The XML string for this child ")
Console.WriteLine("is '{0}'", nav.Value)'Check for attributes.
If nav.HasAttributes Then
Console.WriteLine("This node has attributes")
End If
Loop While nav.MoveToNext
End If
End If
Loop While nav.MoveToNext
'Pause.
Console.ReadLine()
End Sub
End Module