この記事では、XML リテラルと埋め込み式を使用して Visual Basic で XML ツリーを作成する方法について説明します。
例: XML リテラルを使用して XML ツリーを作成する
次の例は、XML リテラルを使用して XElement (この場合は contacts) を作成する方法を示しています。
Dim contacts As XElement = _
<Contacts>
<Contact>
<Name>Patrick Hines</Name>
<Phone>206-555-0144</Phone>
<Address>
<Street1>123 Main St</Street1>
<City>Mercer Island</City>
<State>WA</State>
<Postal>68042</Postal>
</Address>
</Contact>
</Contacts>
例: XML リテラルを使用して、単純なコンテンツを含む XElement を作成する
次のように、単純なコンテンツを含む XElement を作成できます。
Dim n as XElement = <Customer>Adventure Works</Customer>
Console.WriteLine(n)
この例では、次の出力が生成されます。
<Customer>Adventure Works</Customer>
例: XML リテラルを使用して空の要素を作成する
次のように、空の XElementを作成できます。
Dim n As XElement = <Customer/>
Console.WriteLine(n)
この例では、次の出力が生成されます。
<Customer />
埋め込み式を使用してコンテンツを作成する
XML リテラルの重要な機能は、埋め込み式を使用できる点です。 埋め込み式を使用すると、式を評価し、その式の結果を XML ツリーに挿入できます。 式が XElementの型に評価された場合、要素がツリーに挿入されます。 式が XAttributeの型に評価された場合、属性がツリーに挿入されます。 要素と属性は、有効な場所でのみツリーに挿入できます。
埋め込み式に入ることができる式は 1 つだけであることに注意してください。 複数のステートメントを埋め込むはできません。 式が 1 行を超える場合は、行連結文字を使用する必要があります。
埋め込み式を使用して既存のノード (要素を含む) と属性を新しい XML ツリーに追加し、既存のノードが既に親になっている場合は、ノードが複製されます。 新しく複製されたノードは、新しい XML ツリーにアタッチされます。 既存のノードが親でない場合、ノードは単に新しい XML ツリーにアタッチされます。 この記事の最後の例では、これを示します。
例: 埋め込み式を使用して要素を挿入する
次の例では、埋め込み式を使用して要素をツリーに挿入します。
xmlTree1 As XElement = _
<Root>
<Child>Contents</Child>
</Root>
Dim xmlTree2 As XElement = _
<Root>
<%= xmlTree1.<Child> %>
</Root>
Console.WriteLine(xmlTree2)
この例では、次の出力が生成されます。
<Root>
<Child>Contents</Child>
</Root>
例: コンテンツに埋め込み式を使用する
埋め込み式を使用して、要素の内容を指定できます。
Dim str As String
str = "Some content"
Dim root As XElement = <Root><%= str %></Root>
Console.WriteLine(root)
この例では、次の出力が生成されます。
<Root>Some content</Root>
例: 埋め込み式で LINQ クエリを使用する
LINQ クエリの結果を使用して、要素の内容を提供できます。
Dim arr As Integer() = {1, 2, 3}
Dim n As XElement = _
<Root>
<%= From i In arr Select <Child><%= i %></Child> %>
</Root>
Console.WriteLine(n)
この例では、次の出力が生成されます。
<Root>
<Child>1</Child>
<Child>2</Child>
<Child>3</Child>
</Root>
例: 埋め込み式を使用してノード名を指定する
埋め込み式を使用して、属性名、属性値、要素名、および要素値を計算することもできます。
Dim eleName As String = "ele"
Dim attName As String = "att"
Dim attValue As String = "aValue"
Dim eleValue As String = "eValue"
Dim n As XElement = _
<Root <%= attName %>=<%= attValue %>>
<<%= eleName %>>
<%= eleValue %>
</>
</Root>
Console.WriteLine(n)
この例では、次の出力が生成されます。
<Root att="aValue">
<ele>eValue</ele>
</Root>
例: 埋め込み式を使用してノードを複製およびアタッチする
前述のように、埋め込み式を使用して既存のノード (要素を含む) と属性を新しい XML ツリーに追加し、追加するノードが既に親になっている場合は、ノードが複製され、複製が新しい XML ツリーにアタッチされます。 既存のノードが親でない場合は、単に新しい XML ツリーにアタッチされます。
次のコードは、親要素をツリーに追加するとき、および親のない要素をツリーに追加するときの動作を示しています。
' Create a tree with a child element.
Dim xmlTree1 As XElement = _
<Root>
<Child1>1</Child1>
</Root>
' Create an element that's not parented.
Dim child2 As XElement = <Child2>2</Child2>
' Create a tree and add Child1 and Child2 to it.
Dim xmlTree2 As XElement = _
<Root>
<%= xmlTree1.<Child1>(0) %>
<%= child2 %>
</Root>
' Compare Child1 identity.
Console.WriteLine("Child1 was {0}", _
IIf(xmlTree1.Element("Child1") Is xmlTree2.Element("Child1"), _
"attached", "cloned"))
' Compare Child2 identity.
Console.WriteLine("Child2 was {0}", _
IIf(child2 Is xmlTree2.Element("Child2"), _
"attached", "cloned"))
この例では、次の出力が生成されます。
Child1 was cloned
Child2 was attached
こちらも参照ください
.NET