Visual Basic を使用して XPathNavigator クラスを使用して XML を移動する

この記事では、Visual Basic 2005 または Visual Basic .NET の クラスを XPathNavigator 使用して XML を移動するためのサンプル 手順とサンプル コードについて説明します。

元の製品バージョン: Visual Basic 2005、Visual Basic .NET
元の KB 番号: 301111

概要

この詳細な記事では、オブジェクトから作成されたオブジェクトを使用 XPathNavigator して拡張マークアップ言語 (XML) ドキュメントを移動する方法について XPathDocument 説明します。 このサンプルでは、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 を移動する

  1. Visual Studio 2005 または Visual Studio。 NET では、Visual Basic 2005 または Visual Basic .NET コンソール アプリケーションを作成します。

    注:

    この例では、 という名前のファイル 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) にアクセスして、このファイルを取得することもできます。

    Books.xml を、このプロジェクトを\Bin\Debug作成したフォルダーの下にあるフォルダーにコピーする必要があります。

  2. プロジェクトが名前空間を System.Xml 参照していることを確認します。

  3. コードの Imports 後半で Xml これらの名前空間の宣言を修飾する必要がないように、 および XPath 名前空間の ステートメントを使用します。 他の宣言の前に ステートメント Imports を使用する必要があります。

    Imports System.Xml
    Imports System.Xml.XPath
    
  4. 適切な変数を宣言します。 XML ドキュメントを XPathDocument 保持するオブジェクトと、XPath 式を XPathNavigator 評価してドキュメント内を移動するオブジェクトを宣言します。 XPath 式を保持する String オブジェクトを宣言します。 Module1 の Main プロシージャに宣言コードを追加します。

    Dim nav As XPathNavigator
    Dim docNav As XPathDocument
    
  5. サンプル ファイルBooks.xmlXPathDocument使用してオブジェクトを読み込みます。 クラスでは XPathDocument 、拡張スタイルシート言語変換 (XSLT) を使用して、XML ドキュメント処理用の高速でパフォーマンス指向のキャッシュを提供します。 これは XML ドキュメント オブジェクト モデル (DOM) に似ていますが、XSLT 処理と XPath データ モデル用に高度に最適化されています。

    'Open the XML.
    docNav = New XPathDocument("books.xml")
    
  6. ドキュメントからオブジェクトを XPathNavigator 作成します。 XPathNavigator を使用すると、XML ドキュメント内の属性ノードと名前空間ノードの両方を移動できます。

    'Create a navigator to query with XPath.
    nav = docNav.CreateNavigator
    
  7. メソッドを使用してドキュメントのルートに MoveToRoot 移動します。 MoveToRoot は、ノードのツリー全体を含むドキュメント ノードにナビゲーターを設定します。

    'Initial XPathNavigator to start at the root.
    nav.MoveToRoot()
    
  8. メソッドを MoveToFirstChild 使用して、XML ドキュメントの子に移動します。 メソッドは MoveToFirstChild 、現在のノードの最初の子に移動します。 ソースの Books.xml 場合は、ルート ドキュメントから子、セクション、 Comment および書ストア ノードに移動します。

    'Move to the first child node (comment field).
    nav.MoveToFirstChild()
    
  9. メソッドを MoveToNext 使用して、兄弟レベルでノードを反復処理します。 メソッドは MoveToNext 、現在のノードの次の兄弟に移動します。

    'Loop through all the root nodes.
    Do
    ...
    Loop While nav.MoveToNext
    
  10. プロパティを 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
    
  11. ノードに HasAttributes 属性があるかどうかを判断するには、 プロパティを使用します。 など、他のメソッドを使用して属性に移動し、 MoveToNextAttributeその値を調べることもできます。

    注:

    このコード セグメントでは、ツリー全体ではなく、ルート ノードの子孫についてのみ説明します。

    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
    
  12. オブジェクトの ReadLine メソッドを Console 使用して、コンソールディスプレイの最後に一時停止を追加して、上記の結果をより簡単に表示します。

    'Pause.
    Console.ReadLine()
    
  13. コンソール アプリケーション プロジェクトをビルドして実行します。

完全なコード一覧

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

関連情報