No artigo anterior, vimos como os XML Literals permitem incorporar o XML diretamente
no código e, com isso, conseguir manipular muito facilmente esse tipo de
arquivos.
Hoje, veremos sobre as Embedded Expressions, que não são nada mais do que expressões que podemos utilizar embebidas nos códigos, colocando a expressão entre as tags <%= expressão %>, que é a mesmo sintaxe que é utilizada em ASP.NET.
Dessa forma, é muito simples, com base numa lista, DataTable, DataSet, etc., criar um arquivo XML com a estrutura pretendida.
Um exemplo simples, utilizando um Func Delegate (Lambda Expressions) que soma dois valores:
' Define a Lambda Expression
Dim f As Func(Of Integer, Integer, Integer) = Function(x, y) x + y
Dim exemplo = _
<teste>
<valor><%= f(125, 125).ToString() %></valor>
</teste>
O resultado será:
<teste>
<valor>250</valor>
</teste>
Mas podemos incluir o cabeçalho de um arquivo XML e, usando o LINQ, preencher o arquivo de uma forma bastante simples com base numa lista, neste exemplo, List(Of T)
' Cria uma lista com alguns livros
Dim bookList As New List(Of String)
bookList.AddRange(New String() {"Crepúsculo", "Equador", "O Sétimo Selo"})
' Gera o XML e grava para o disco.
Dim newBookList1 = _
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<library>
<books>
<%= From b In bookList Select <book><%= b %></book> %>
</books>
</library>
newBookList1.Save("c:\result.xml")
Neste exemplo, o resultado será:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<library>
<books>
<book>Crepúsculo</book>
<book>Equador</book>
<book>O Sétimo Selo</book>
</books>
</library>
Usando o método DataTable.WriteXml() ou Datset.WriteXml(), é muito simples gravar o conteúdo de uma base de dados ou de uma tabela para um arquivo XML. No entanto, não permite criar com o formato específico ou usar apenas alguns campos.
Desta forma, e usando Embedded Expressions, podemos formatar o resultado final, como se pode ver no seguinte exemplo:
' Neste exemplo tudo é criado manualmente, mas os dados poderiam
' ser preenchidos de uma tabela SQL ou outra base de dados qualquer
Dim dt As New DataTable("Livros")
dt.Columns.Add("Livro", GetType(String))
dt.Columns.Add("Autor", GetType(String))
dt.Rows.Add("Crepúsculo", "Stephenie Meyer")
dt.Rows.Add("Equador", "Miguel S. Tavares")
dt.Rows.Add("O Sétimo Selo", "José R. dos Santos")
Dim ds As New DataSet
ds.Tables.Add(dt)
' Gera o XML, definindo 2 atributos: "name" e "author"
Dim newBookList2 = _
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Isto é apenas um comentário >
<library>
<books>
<%= From b In ds.Tables("Livros") Select _
<book name=<%= b.Item("Livro") %>
author=<%= b.Item("Autor") %>/> %>
</books>
</library>
' Grava para o disco
newBookList2.Save("c:\result.xml")
Finalmente o resultado:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<library>
<books>
<book name="Crepúsculo"author="Stephenie Meyer" />
<book name="Equador"author="Miguel S. Tavares" />
<book name="O Sétimo Selo"author="José R. dos Santos" />
</books>
</library>
Como podem ver, usando Embedded Expressions e XML Literals, consegue-se facilmente criar arquivos XML, e com a estrutura do arquivo definida no código.
Espero que ajude!