Visual Basic 中的 XML 常值簡介
更新: November 2007
本節提供在 Visual Basic 中建立 XML 樹狀結構的相關資訊。
如需有關將 LINQ 查詢結果當做 XML 樹狀結構之內容使用的詳細資訊,請參閱功能結構 (LINQ to XML)。
如需有關 Visual Basic 之 XML 常值的詳細資訊,請參閱Visual Basic 中的 LINQ to XML 概觀。
建立 XML 樹狀結構
下列範例顯示如何在此案例 contacts 中建立 XElement:
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>
建立包含簡單內容的 XElement
您可以建立包含簡單內容的 XElement,如下所示:
Dim n as XElement = <Customer>Adventure Works</Customer>
Console.WriteLine(n)
這個範例會產生下列輸出:
<Customer>Adventure Works</Customer>
建立空項目
您可以建立空的 XElement,如下所示:
Dim n As XElement = <Customer/>
Console.WriteLine(n)
這個範例會產生下列輸出:
<Customer />
使用內嵌的運算式
XML 常值的其中一個重要功能是,這些 XML 常值允許內嵌的運算式。內嵌的運算式可讓您評估運算式,並將運算式的結果插入到 XML 樹狀結構中。如果運算式評估 XElement 的型別,會將項目插入到樹狀結構中。如果運算式評估 XAttribute 的型別,會將屬性插入到樹狀結構中。您可以將項目和屬性僅插入到有效的樹狀結構中。
請注意,只有單一運算式可以插入到內嵌的運算式中,這點很重要。您無法內嵌多個陳述式。如果運算式的延伸超過單一行,您必須使用行接續字元。
如果您使用內嵌的運算式,將現有的節點 (包括項目) 和屬性加入到新的 XML 樹狀結構,而且如果現有的節點已經成為父代,這些節點就會遭到複製。新複製的節點會附加到新的 XML 樹狀結構中。如果現有的節點沒有成為父代,這些節點只會附加到新的 XML 樹狀結構。本主題中的最後一個範例會示範這個情況。
下列範例使用內嵌的運算式,將項目插入到樹狀結構中:
Dim 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 is 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