Visual Basic 中的 XML 文本 (LINQ to XML)
本文提供了有关使用 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