Visual Basic における LINQ to XML の概要

更新 : 2007 年 11 月

Visual Basic では、XML リテラルと XML 軸プロパティを通して LINQ to XML をサポートします。これにより、Visual Basic コードでは、使い慣れた便利な構文を使用して XML を操作できます。XML リテラルを使用すると、コード内に XML を直接含めることができます。XML 軸プロパティは、XML リテラルの子ノード、子孫ノード、および属性へのアクセスを可能にします。詳細については、「XML リテラルの概要」および「Visual Basic での XML へのアクセス」を参照してください。

LINQ to XML は、統合言語クエリ (LINQ: Language-Integrated Query) を活用するように特別に設計されたインメモリ XML プログラミング API です。LINQ API を直接呼び出すこともできますが、XML リテラルの宣言と XML 軸プロパティへの直接的なアクセスは Visual Basic でのみ可能です。

Bb384460.alert_note(ja-jp,VS.90).gifメモ :

XML リテラルと XML 軸プロパティは、ASP.NET ページ内の宣言コードではサポートされません。Visual Basic の XML 機能を使用するには、ASP.NET アプリケーションの分離コード ページにコードを配置します。

XML の作成

Visual Basic で XML ツリーを作成する方法は 2 つあります。XML リテラルをコード内に直接宣言するか、LINQ API を使用してツリーを作成します。どちらの処理でも、XML ツリーの最終構造を反映するコードを記述できます。たとえば、次のコード例では、XML 要素が作成されます。

Dim contact1 As XElement = _
    <contact>
      <name>Patrick Hines</name>
      <phone type="home">206-555-0144</phone>
      <phone type="work">425-555-0145</phone>
    </contact>

詳細については、「Visual Basic での XML の作成」を参照してください。

XML へのアクセスとナビゲーション

Visual Basic には、XML 構造体へのアクセスとナビゲーションを行うための XML 軸プロパティが用意されています。これらのプロパティを使用して XML 子要素の名前を指定することで、XML の要素と属性にアクセスできます。または、LINQ メソッドを明示的に呼び出して、要素と属性のナビゲーションおよび検索を実行することもできます。たとえば、次のコード例では、XML 軸プロパティを使用して XML 要素の属性と子要素を参照します。このコード例では、LINQ クエリを使用して子要素を取得し、それらを XML 要素として出力することで、変換を効率よく行っています。

' Place Imports statements at the top of your program.  
Imports <xmlns:ns="http://SomeNamespace">

Module Sample1

    Sub SampleTransform()

        ' Create test by using a global XML namespace prefix. 

        Dim contact = _
            <ns:contact>
                <ns:name>Patrick Hines</ns:name>
                <ns:phone ns:type="home">206-555-0144</ns:phone>
                <ns:phone ns:type="work">425-555-0145</ns:phone>
            </ns:contact>

        Dim phoneTypes = _
          <phoneTypes>
              <%= From phone In contact.<ns:phone> _
                  Select <type><%= phone.@ns:type %></type> _
              %>
          </phoneTypes>

        Console.WriteLine(phoneTypes)
    End Sub

End Module

詳細については、「Visual Basic での XML へのアクセス」を参照してください。

XML 名前空間

Visual Basic では、Imports ステートメントを使用して、グローバル XML 名前空間のエイリアスを指定できます。次の例は、Imports ステートメントを使用して XML 名前空間をインポートする方法を示しています。

Imports <xmlns:ns="http://someNamespace">

XML 名前空間のエイリアスは、XML 軸プロパティにアクセスしたり、XML ドキュメントや XML 要素の XML リテラルを宣言したりするときに使用できます。

GetXmlNamespace 演算子を使用すると、特定の名前空間プレフィックスの XNamespace オブジェクトを取得できます。

詳細については、「Imports ステートメント (XML 名前空間)」を参照してください。

XML リテラルでの XML 名前空間の使用

次の例は、グローバル名前空間 ns を使用する XElement オブジェクトの作成方法を示しています。

Dim contact1 As XElement = _
    <ns:contact>
        <ns:name>Patrick Hines</ns:name>
        <ns:phone type="home">206-555-0144</ns:phone>
        <ns:phone type="work">425-555-0145</ns:phone>
    </ns:contact>

Console.WriteLine(contact1)

Visual Basic コンパイラは、XML 名前空間のエイリアスを含む XML リテラルを、XML 表記の XML 名前空間を使用する同等のコードに変換し、xmlns 属性を追加します。前のセクションで示した例のコードをコンパイルすると、次の例と本質的に同一の実行可能コードが生成されます。

Dim contact2 As XElement = _
    <ns1:contact xmlns:ns1="http://someNamespace">
        <ns1:name>Patrick Hines</ns1:name>
        <ns1:phone type="home">206-555-0144</ns1:phone>
        <ns1:phone type="work">425-555-0145</ns1:phone>
    </ns1:contact>

Console.WriteLine(contact2)

XML 軸プロパティでの XML 名前空間の使用

XML リテラル内で宣言された XML 名前空間は、XML 軸プロパティでは使用できません。ただし、XML 軸プロパティでグローバル名前空間を使用することはできます。XML 名前空間プレフィックスとローカル要素名を区切るには、コロンを使用します。例を次に示します。

Console.WriteLine("Contact name is: " & contact1.<ns:name>.Value)

参照

その他の技術情報

XML (Visual Basic)

Visual Basic での XML の作成

Visual Basic での XML へのアクセス

Visual Basic での XML の操作