XML Literals en Visual Basic (LINQ to XML)

En este artículo se proporciona información sobre cómo crear árboles XML en Visual Basic mediante literales XML y expresiones incrustadas.

Ejemplo: Uso de literales XML para crear un árbol XML

El siguiente ejemplo muestra cómo crear un XElement; en este caso, contacts con XML literals:

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>

Ejemplo: Usar literal XML para crear un XElement con contenido simple

Puede crear un XElement que incluya un contenido simple, tal y como se detalla a continuación:

Dim n as XElement = <Customer>Adventure Works</Customer>
Console.WriteLine(n)

Este ejemplo produce el siguiente resultado:

<Customer>Adventure Works</Customer>

Ejemplo: Usar un literal XML para crear un elemento vacío

Puede crear un XElement vacío, tal y como se indica a continuación:

Dim n As XElement = <Customer/>
Console.WriteLine(n)

Este ejemplo produce el siguiente resultado:

<Customer />

Uso de expresiones incrustadas para crear contenido

Una característica importante de los literales XML es que admiten el uso de expresiones incrustadas. Las expresiones incrustadas le permiten evaluar una expresión e incorporar los resultados de la expresión a un árbol XML. Si el resultado de evaluar la expresión es de tipo XElement, se agregará un elemento al árbol. Si el resultado de evaluar la expresión es de tipo XAttribute, se agregará un atributo al árbol. Puede introducir elementos y atributos al árbol solo en aquellos lugares donde sean válidos.

Es importante reseñar que en una expresión incrustada solo puede aparecer una expresión única. No es posible incrustar varias instrucciones. Si una expresión se extiende más allá de una única línea, deberá utilizar el carácter de continuación de línea.

Si utiliza una expresión incrustada para agregar nodos (incluyendo elementos) y atributos ya existentes a nuevo árbol XML y los nodos existentes ya tienen elementos primarios, los nodos se clonarán. Esos nodos clonados nuevos se adjuntan al nuevo árbol XML. Si los nodos ya existentes no tienen elementos primarios, los nodos simplemente se adjuntan al nuevo árbol XML. En el último ejemplo de este artículo se muestra esto.

Ejemplo: Usar una expresión incrustada para insertar un elemento

El siguiente ejemplo utiliza una expresión incrustada para agregar un elemento al árbol:

xmlTree1 As XElement = _
    <Root>
        <Child>Contents</Child>
    </Root>
Dim xmlTree2 As XElement = _
    <Root>
        <%= xmlTree1.<Child> %>
    </Root>
Console.WriteLine(xmlTree2)

Este ejemplo produce el siguiente resultado:

<Root>
  <Child>Contents</Child>
</Root>

Ejemplo: Uso de una expresión insertada para el contenido

Puede utilizar una expresión incrustada para proporcionar el contenido de un elemento:

Dim str As String
str = "Some content"
Dim root As XElement = <Root><%= str %></Root>
Console.WriteLine(root)

Este ejemplo produce el siguiente resultado:

<Root>Some content</Root>

Ejemplo: Usar una consulta de LINQ en una expresión incrustada

Puedes utilizar los resultados proporcionados por una consulta LINQ para el contenido de un elemento:

Dim arr As Integer() = {1, 2, 3}

Dim n As XElement = _
    <Root>
        <%= From i In arr Select <Child><%= i %></Child> %>
    </Root>

Console.WriteLine(n)

Este ejemplo produce el siguiente resultado:

<Root>
  <Child>1</Child>
  <Child>2</Child>
  <Child>3</Child>
</Root>

Ejemplo: Uso de una expresión incrustada para proporcionar nombres de nodo

También puedes utilizar expresiones incrustadas para calcular nombres de atributos, valores de atributos, nombres de elementos y valores de elementos:

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)

Este ejemplo produce el siguiente resultado:

<Root att="aValue">
  <ele>eValue</ele>
</Root>

Ejemplo: Uso de una expresión insertada para clonar y adjuntar nodos

Como ya se mencionó anteriormente, si utiliza una expresión incrustada para agregar nodos (incluyendo elementos) y atributos ya existentes a nuevo árbol XML y los nodos que se añaden ya tienen elementos primarios, los nodos se clonarán y esos clones se adjuntarán al nuevo árbol XML. Si los nodos ya existentes no tienen elementos primarios, simplemente se adjuntan al nuevo árbol XML.

El siguiente código demuestra qué ocurre si agrega un elemento que tiene elemento primario a un árbol y qué ocurre si agrega un elemento que no tenga elemento primario a un árbol.

' 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"))

Este ejemplo produce el siguiente resultado:

Child1 was cloned
Child2 was attached

Consulte también