XML リテラルの概要
更新 : 2007 年 11 月
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: Language-Integrated Query) と密接に統合しています。詳細については、「XElement」を参照してください。
XML リテラルに、Visual Basic 式を埋め込むことができます。アプリケーションの実行時、リテラルごとに LINQ to XML オブジェクトが作成され、埋め込まれた式の値が取り込まれます。これにより、XML リテラルの中に動的な内容を指定できます。詳細については、「XML での埋め込み式」を参照してください。
XML リテラルの構文と XML 1.0 の構文の相違点の詳細については、「XML リテラルと XML 1.0 仕様」を参照してください。
単純なリテラル
Visual Basic コード内に有効な XML を入力するか渡すことによって、LINQ to 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>
メモ : |
---|
Visual Basic での XML リテラルの構文は、XML 1.0 仕様と一致しません。詳細については、「XML リテラルと XML 1.0 仕様」を参照してください。 |
行の継続
XML リテラルは、行継続文字 (空白とアンダースコアを入力して改行するシーケンス) を使用することなく複数の行にわたって記述できます。これにより、コード内の XML リテラルを XML ドキュメントと簡単に比較できます。
コンパイラは、行継続文字を XML リテラルの一部として処理します。したがって、空白とアンダースコアを入力して改行というシーケンスは、それが LINQ to XML オブジェクトの一部の場合のみ使用します。
ただし、埋め込み式の中に複数の行がある場合は、行継続文字が必要です。詳細については、「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 パラメータの値 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>