Share via


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

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

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

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

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

単純なリテラル

Visual Basic コード内に有効な XML を入力するか渡すことによって、LINQ to XML オブジェクトを作成できます。 XML 要素リテラルは、XElement オブジェクトを返します。 詳細については、「XML 要素リテラル (Visual Basic)」および「XML リテラルと XML 1.0 仕様 (Visual Basic)」を参照してください。 次の例は、複数の子要素を持つ 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 ドキュメント リテラル (Visual Basic)」を参照してください。

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>

注意

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

行の継続

XML リテラルは、行継続文字 (空白とアンダースコアを入力して改行するシーケンス) を使用することなく複数の行にわたって記述できます。 これにより、コード内の XML リテラルを XML ドキュメントと簡単に比較できます。

コンパイラは、行継続文字を XML リテラルの一部として処理します。 したがって、空白とアンダースコアを入力して改行というシーケンスは、それが LINQ to XML オブジェクトの一部の場合のみ使用します。

ただし、埋め込み式の中に複数の行がある場合は、行継続文字が必要です。 詳細については、「XML での埋め込み式 (Visual Basic)」を参照してください。

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 コンパイラは、#ctor(XName, Object) コンストラクターを 2 回呼び出します。 1 回目の呼び出しでは、name パラメーターの値 type と、value パラメーターの値 home を渡します。 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>

参照

関連項目

XML ドキュメント リテラル (Visual Basic)

XML 要素リテラル (Visual Basic)

XElement

概念

XML での埋め込み式 (Visual Basic)

その他の技術情報

Visual Basic での XML の作成

XML リテラル (Visual Basic)