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

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

LINQ to XML は、統合言語クエリ (LINQ) を利用するために設計された、メモリ内の XML プログラミング API です。 LINQ API は直接呼び出すことができますが、XML リテラルを宣言して XML 軸プロパティに直接アクセスできるのは、Visual Basic だけです。

Note

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

Play button 関連するビデオ デモについては、「LINQ to XML を使ってみる」と「LINQ to XML を使用して Excel スプレッドシートを作成する」を参照してください。

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 リテラルを同等のコードに変換します。このコードは、xmlns 属性に XML 名前空間を使用するために XML 表記を使用します。 前のセクションの例のコードをコンパイルすると、次の例と基本的に同じ実行可能コードが生成されます。

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)

関連項目