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
En Visual Studio, cree un nuevo proyecto de Visual Basic en la plantilla de proyecto Aplicación de consola.
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óduloModule1
. 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
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")
Después de
Sub Main
deModule1
, 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
deModule1
.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
Guarde los cambios.
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>