本文介绍如何使用 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,则属性将插入树中。 只能将元素和属性插入到它们在树中有效的位置。
应当注意,只能将单个表达式放入嵌入式表达式。 不能嵌入多个语句。 如果表达式超出单个行,则必须使用行继续符。
如果使用嵌入表达式将现有节点(包括元素)和属性添加到新的 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