XML リテラルの概要 (Visual Basic)

XML リテラルを使用すると、Visual Basic コード内に直接 XML を組み込むことができます。 XML リテラル構文は LINQ to XML オブジェクトを表し、XML 1.0 構文に似ています。 これにより、コードが最終的な XML と同じ構造を持つため、XML 要素およびドキュメントをプログラムで簡単に作成できます。

Visual Basic は、XML リテラルを LINQ to XML オブジェクト内にコンパイルします。 LINQ to XML には、XML を作成および操作するための簡単なオブジェクト モデルが用意されています。このモデルは、統合言語クエリ (LINQ) と統合されています。 詳細については、「XElement」を参照してください。

XML リテラルに Visual Basic 式を埋め込むことができます。 実行時に、アプリケーションは、埋め込み式の値を組み込んで、各リテラルの LINQ to XML オブジェクトを作成します。 これにより、XML リテラル内に動的コンテンツを指定できます。 詳細については、「XML での埋め込み式」を参照してください。

XML リテラル構文と XML 1.0 構文の違いの詳細については、「XML リテラルと XML 1.0 仕様」を参照してください。

単純なリテラル

Visual Basic コードに LINQ to XML オブジェクトを作成するには、有効な XML を入力するか、貼り付けます。 XML 要素リテラルは XElement オブジェクトを返します。 詳細については、「XML 要素リテラル」と「XML リテラルと XML 1.0 仕様」を参照してください。 次の例では、複数の子要素を持つ 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>

次の例に示すように、XML リテラルを <?xml version="1.0"?> で開始することで、XML ドキュメントを作成できます。 XML ドキュメントは XDocument オブジェクトを返します。 詳細については、「XML ドキュメント リテラル」を参照してください。

Dim contactDoc As XDocument = 
    <?xml version="1.0"?>
    <contact>
      <name>Patrick Hines</name>
      <phone type="home">206-555-0144</phone>
      <phone type="work">425-555-0145</phone>
    </contact>

Note

Visual Basic の XML リテラル構文は、XML 1.0 仕様の構文と同一ではありません。 詳細については、「XML リテラルと XML 1.0 仕様」を参照してください。

行の連結

XML リテラルは、行連結文字 (スペース - アンダースコア - Enter キーのシーケンス) を使用せずに、複数行にまたがることができます。 これにより、コード内の XML リテラルを XML ドキュメントと比較しやすくなります。

コンパイラは、行連結文字を XML リテラルの一部として扱います。 そのため、LINQ to XML オブジェクトに属している場合にのみ、スペース - アンダースコア - Enter キーのシーケンスを使用する必要があります。

ただし、埋め込み式に複数行の式がある場合は、行連結文字が必要になります。 詳細については、「XML での埋め込み式」を参照してください。

XML リテラルへのクエリの埋め込み

埋め込み式では、クエリを使用できます。 この操作を行うと、クエリによって返される要素が XML 要素に追加されます。 これにより、ユーザーのクエリの結果などの動的コンテンツを XML リテラルに追加できます。

たとえば、次のコードでは、埋め込みクエリを使用して phoneNumbers2 配列のメンバーから XML 要素を作成してから、それらの要素を contact2 の子として追加しています。

Public Class XmlSamples

  Public Sub Main()
    ' Initialize the objects. 

    Dim phoneNumbers2 As Phone() = { 
        New Phone("home", "206-555-0144"), 
        New Phone("work", "425-555-0145")}

    ' Convert the data contained in phoneNumbers2 to XML. 

    Dim contact2 = 
        <contact>
          <name>Patrick Hines</name>
          <%= From p In phoneNumbers2 
            Select <phone type=<%= p.Type %>><%= p.Number %></phone> 
          %>
        </contact>

    Console.WriteLine(contact2)
  End Sub

End Class

Class Phone
  Public Type As String
  Public Number As String
  Public Sub New(ByVal t As String, ByVal n As String)
    Type = t
    Number = n
  End Sub
End Class

コンパイラで XML リテラルからオブジェクトを作成する方法

Visual Basic コンパイラは、XML リテラルを同等の LINQ to XML コンストラクターの呼び出しに変換して、LINQ to XML オブジェクトを構築します。 たとえば、Visual Basic コンパイラは、次のコード例を、XML バージョン命令に対する XProcessingInstruction コンストラクターの呼び出し、<contact><name><phone> 要素に対する XElement コンストラクターの呼び出し、および type 属性に対する XAttribute コンストラクターの呼び出しに変換します。 具体的には、次のサンプルの属性を指定すると、Visual Basic コンパイラは、XAttribute(XName, Object) コンストラクターを 2 回呼び出します。 1 回目は、name パラメーターの値 typehome パラメーターの値 value を渡します。 2 回目は、name パラメーターの値 type も渡しますが、value パラメーターの値 work を渡します。

Dim contactDoc As XDocument = 
    <?xml version="1.0"?>
    <contact>
      <name>Patrick Hines</name>
      <phone type="home">206-555-0144</phone>
      <phone type="work">425-555-0145</phone>
    </contact>

関連項目