Compartir vía


Cómo: Transformar XML usando LINQ (Visual Basic)

Los literales XML facilitan la lectura de XML de un origen y la transforman en un nuevo formato XML. Puede aprovechar las consultas LINQ para recuperar el contenido que se va a transformar o cambiar el contenido de un documento existente a un nuevo formato XML.

En el ejemplo de este tema se transforma el contenido de un documento de origen XML en HTML para visualizarlo en un explorador.

Nota:

Es posible que tu equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en las siguientes instrucciones. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Personalizar el IDE.

Para transformar un documento XML

  1. En Visual Studio, cree un nuevo proyecto de Visual Basic en la plantilla de proyecto Aplicación de consola.

  2. Haga doble clic en el archivo Module1.vb creado en el proyecto para modificar el código de Visual Basic. Agregue el siguiente código a Sub Main del módulo Module1. Este código crea el documento XML de origen como un objeto XDocument.

    Dim catalog =
      <?xml version="1.0"?>
        <Catalog>
          <Book id="bk101">
            <Author>Garghentini, Davide</Author>
            <Title>XML Developer's Guide</Title>
            <Price>44.95</Price>
            <Description>
              An in-depth look at creating applications
              with <technology>XML</technology>. For
              <audience>beginners</audience> or
              <audience>advanced</audience> developers.
            </Description>
          </Book>
          <Book id="bk331">
            <Author>Spencer, Phil</Author>
            <Title>Developing Applications with Visual Basic .NET</Title>
            <Price>45.95</Price>
            <Description>
              Get the expert insights, practical code samples,
              and best practices you need
              to advance your expertise with <technology>Visual
              Basic .NET</technology>.
              Learn how to create faster, more reliable applications
              based on professional,
              pragmatic guidance by today's top <audience>developers</audience>.
            </Description>
          </Book>
        </Catalog>
    

    Procedimiento para cargar XML desde un archivo, cadena o secuencia

  3. Después del código para crear el documento XML de origen, agregue el código siguiente para recuperar todos los elementos <Book> del objeto y transformarlos en un documento HTML. La lista de elementos <Book> se crea mediante una consulta LINQ que devuelve una colección de objetos XElement que contienen el HTML transformado. Puede usar expresiones insertadas para poner los valores del documento de origen en el nuevo formato XML.

    El documento HTML resultante se escribe en un archivo mediante el método Save.

    Dim htmlOutput =
      <html>
        <body>
          <%= From book In catalog.<Catalog>.<Book>
              Select <div>
                       <h1><%= book.<Title>.Value %></h1>
                       <h3><%= "By " & book.<Author>.Value %></h3>
                        <h3><%= "Price = " & book.<Price>.Value %></h3>
                        <h2>Description</h2>
                        <%= TransformDescription(book.<Description>(0)) %>
                        <hr/>
                      </div> %>
        </body>
      </html>
    
    htmlOutput.Save("BookDescription.html")
    
  4. Después de Sub Main de Module1, agregue un nuevo método (Sub) para transformar un nodo <Description> en el formato HTML especificado. El código del paso anterior llama a este método y se usa para conservar el formato de los elementos <Description>.

    Este método reemplaza los subelementos del elemento <Description> por HTML. El método ReplaceWith se usa para conservar la ubicación de los subelementos. El contenido transformado del elemento <Description> se incluye en un elemento de párrafo HTML (<p>). La propiedad Nodes se usa para recuperar el contenido transformado del elemento <Description>. Esto garantiza que los subelementos se incluyan en el contenido transformado.

    Agregue el código siguiente después de Sub Main de Module1.

    Public Function TransformDescription(ByVal desc As XElement) As XElement
    
      ' Replace <technology> elements with <b>.
      Dim content = (From element In desc...<technology>).ToList()
    
      If content.Count > 0 Then
        For i = 0 To content.Count - 1
          content(i).ReplaceWith(<b><%= content(i).Value %></b>)
        Next
      End If
    
      ' Replace <audience> elements with <i>.
      content = (From element In desc...<audience>).ToList()
    
      If content.Count > 0 Then
        For i = 0 To content.Count - 1
          content(i).ReplaceWith(<i><%= content(i).Value %></i>)
        Next
      End If
    
      ' Return the updated contents of the <Description> element.
      Return <p><%= desc.Nodes %></p>
    End Function
    
  5. Guarde los cambios.

  6. Presione F5 para ejecutar el código. El documento guardado resultante será similar al siguiente:

    <?xml version="1.0"?>
    <html>
      <body>
        <div>
          <h1>XML Developer's Guide</h1>
          <h3>By Garghentini, Davide</h3>
          <h3>Price = 44.95</h3>
          <h2>Description</h2>
          <p>
            An in-depth look at creating applications
            with <b>XML</b>. For
            <i>beginners</i> or
            <i>advanced</i> developers.
          </p>
          <hr />
        </div>
        <div>
          <h1>Developing Applications with Visual Basic .NET</h1>
          <h3>By Spencer, Phil</h3>
          <h3>Price = 45.95</h3>
          <h2>Description</h2>
          <p>
            Get the expert insights, practical code
            samples, and best practices you need
            to advance your expertise with <b>Visual
            Basic .NET</b>. Learn how to create faster,
            more reliable applications based on
            professional, pragmatic guidance by today's
            top <i>developers</i>.
          </p>
          <hr />
        </div>
      </body>
    </html>
    

Consulte también