XML
- Apresentando XML Literals (VB.NET)
O titulo do artigo pode dar a sugerir que se trata de uma novidade mas na verdade os XML Literals estão disponíveis a partir do .NET Framework 3.5/Visual Studio 2008 e dão suporte a grande parte da especificação Extensible Markup Language (XML) 1.0.
Mas o que vem a ser esse tal de 'XML Literals' ?
Os XML Literals são um recurso que permite que você incorpore a sintaxe XML diretamente no seu código.
A sintaxe XML literal representa objetos LINQ to XML, sendo semelhante à sintaxe XML 1.0. Isto torna mais fácil criar elementos XML e documentos de programação porque seu código possui a mesma estrutura que o XML final.
O Visual Basic compila literais XML em objetos LINQ to XML sendo que o LINQ to XML fornece um modelo de objetos simples para criar e manipular XML, e esse modelo se integra bem com a Language-Integrated Query (LINQ).
Você pode inserir uma expressão Visual Basic em um literal XML. Em tempo de execução, o aplicativo cria um objeto LINQ to XML para cada literal, incorporando os valores das expressões incorporadas. Isso permite que você especifique conteúdo dinâmico dentro de um literal XML.
Vamos começar com um exemplo mais simples possível para você sentir o recurso.
Abra o Visual Basic 2010 Express Edition e crie um novo projeto do tipo Console Application com o nome XML_Literal;
A seguir no Module1.vb inclua o código mostrado na figura abaixo:
![]() |
Executando o projeto teremos:
![]() |
Um literal XML pode abranger várias linhas sem usar caracteres de continuação de linha (o espaço sublinhado).Isto torna mais fácil comparar literais XML no código com documentos XML.O compilador trata caracteres de continuação de linha como parte de um literal XML. Portanto, você deve usar o espaço-sublinhado só quando ele fazer parte do objeto LINQ to XML.
Embutindo consultas em XML Literals
Você pode usar uma consulta em uma expressão incorporada. Quando você fizer isso, os elementos retornados pela consulta são adicionados ao elemento XML. Isso permite que você adicione conteúdo dinâmico, como o resultado de uma consulta do usuário, a um literal XML.
Por exemplo, o código a seguir usa uma consulta incorporada para criar elementos XML dos membros do array telefones e depois adicionar esses elementos como filhos de contatos.
Vamos usar a mesma solução criada no início incluindo apenas um novo projeto; para isso clique no menu File->Add -> New Project e escolha o modelo Console Application informando o nome XML_Literals2;
A seguir digite o código abaixo no Module1.vb:
Module Module1 Sub Main() ' Inicializa os objetos Dim telefones As Telefone() = { New Telefone("residencia", "206-555-0144"), New Telefone("trabalho", "425-555-0145")} ' Converte os dados contidos em telefones para XML Dim contato = <contato> <nome>Jose Carlos Macoratti</nome> <%= From fone In telefones Select <telefone tipo=<%= fone.Tipo %>><%= fone.Numero %></telefone> %> </contato> Console.WriteLine(contato) Console.ReadKey() End Sub Class Telefone Public Tipo As String Public Numero As String Public Sub New(ByVal tip As String, ByVal num As String) Tipo = tip Numero = num End Sub End Class End Module |
![]() |
O compilador Visual Basic converte os literais XML em chamadas para o construtor LINQ to XML equivalente para construir o objeto LINQ to XML.
No nosso exemplo, o compilador Visual Basic irá fazer o seguinte :
Criando e consultando Documentos XML
Podemos criar documentos XML definindo o seguinte XML literal no início do artigo: <?xml version="1.0"?>
Vamos criar um novo projeto no Visual Basic 2010 Express Edition via menu File-> New Project escolhendo o template Windows Forms Application com o nome XML_Literals_WF;
Vamos incluir no formulário padrão os controles :
Conforme o leiaute da figura abaixo:
![]() |
a- Criando e listando o conteúdo de um documento XML
No evento Click do botão de comando - Listar nomes - vamos incluir o código abaixo:
Private Sub btnLista_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLista.Click Dim Livros = _ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <livraria> <livro nome="Programming Visual Basic .NET" autor="Franceso Balena"/> <livro nome="Coding Techniques for Microsoft Visual Basic" autor="John Connel"/> <livro nome="Mastering Microsoft Visual Basic 2008" autor="Evangelos Petroutsos"/> <livro nome="Mastering Microsoft Visual Basic 2010" autor="Evangelos Petroutsos"/> <livro nome="Visual Basic 2008 Programmer's" autor="Rod Stephens"/> </livraria>
For Each livro In From element In Livros.<livraria>.<livro> End Sub |
Neste código estamos criando o documento XML e usando um laço for each para percorrer o documento listando os nomes dos livros.
Note que como o nome do livro é um atributo estamos usando o caractere @ antes do atributo nome;
Executando o projeto e clicando no botão - Listar nomes - temos:
![]() |
b- Pesquisando um documento XML
Podemos usar uma consulta LINQ to XML para realizar uma consulta no documento XML criado.
No evento Click do botão de comando Procurar Livro digite o código a seguir:
Private Sub btnProcurar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcurar.Click Dim Livros = _ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <livraria> <livro nome="Programming Visual Basic .NET" autor="Franceso Balena"/> <livro nome="Coding Techniques for Microsoft Visual Basic" autor="John Connel"/> <livro nome="Mastering Microsoft Visual Basic 2008" autor="Evangelos Petroutsos"/> <livro nome="Mastering Microsoft Visual Basic 2010" autor="Evangelos Petroutsos"/> <livro nome="Visual Basic 2008 Programmer's" autor="Rod Stephens"/> </livraria> Dim procuraLivro = From livro In Livros.<livraria>.<livro> _ Where livro.@nome.ToString.Contains(txtBusca.Text) _ Select livro.@nome, livro.@autor lstDados.Items.Clear() For Each livro In From element In procuraLivro lstDados.Items.Add("Livro: " & livro.nome) lstDados.Items.Add("Autor: " & livro.autor) lstDados.Items.Add(New String("-"c, 40)) Next End Sub |
A consulta LINQ é exibida a seguir:
Dim procuraLivro = From
livro In Livros.<livraria>.<livro> _
Where
livro.@nome.ToString.Contains(txtBusca.Text) _
Select
livro.@nome, livro.@autor
Seleciona no documento XML os nomes e autores dos livros que contém o critério informado no controle txtBusca.Text;
O laço for each percorre o resultado exibindo o nome e o autor do livro:
For Each livro In From
element In procuraLivro
lstDados.Items.Add("Livro: " & livro.nome)
lstDados.Items.Add("Autor: " & livro.autor)
lstDados.Items.Add(New
String("-"c, 40))
Next
No exemplo informamos o critério 'Visual' e o resultado obtido foi o seguinte:
![]() |
Criando e salvando o XML
Veremos agora outro exemplo onde vamos usar um DataTable para criar o documento XML e a seguir salvar o XML no disco.
Inclua um novo controle Button (btnSalvar) com o texto : Salvar XML
A seguir no evento Click deste botão inclua o código abaixo:
Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click Try ' Criando um DataTable manualmente Dim dt As New DataTable("Livros") dt.Columns.Add("Livro", GetType(String)) dt.Columns.Add("Autor", GetType(String)) dt.Rows.Add("Programming Visual Basic .NET", "Franceso Balena") dt.Rows.Add("Coding Techniques for Microsoft Visual Basic", "John Connel") dt.Rows.Add("Visual Basic 2008 Programmer's", "Rod Stephens") Dim ds As New DataSet ds.Tables.Add(dt) ' Cria um XML com dois atributos: "nome" e "autor" Dim listaLivros = _ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <livraria> <livros> <%= From b In ds.Tables("Livros") Select _ <livro nome=<%= b.Item("Livro") %> autor=<%= b.Item("Autor") %>/> %> </livros> </livraria> ' Salva o xml no disco listaLivros.Save("c:\dados\livaria.xml") MessageBox.Show(" Arquivo << livraria.xml >> salvo em c:\dados ") Catch ex As Exception MessageBox.Show(" Erro : " + ex.Message) End Try End Sub |
Executando o projeto teremos o arquivo XML salvo no local indicado. Abrindo o XML podemos conferir o resultado:
![]() |
|
![]() |
Alterando valores do documento XML
Alterar um documento XML usando XML Literals é bem simples basta ler o documento, especificar o elemento que deseja alterar e fazer a alteração.
No evento Click do botão btnAlterar inclua o código abaixo:
Private Sub btnAlterar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAlterar.Click Try 'carrega o arquivo xml Dim arquivoXML = XDocument.Load("c:\dados\livraria.xml") 'localiza o elemento a ser alterado Dim elemento = arquivoXML...<livro>.Where(Function(f) _ f.@nome = txtCriterio.Text) 'alterando o nome o autor (apenas para efeito de teste pois eu não sou o autor do livro) elemento.@autor = txtNovoValor.Text arquivoXML.Save("c:\dados\livraria.xml") Catch ex As Exception MessageBox.Show(" Erro : " + ex.Message) End Try End Sub |
Executando o projeto teremos:
![]() |
|
![]() |
Após realizar a alteração podemos verificar no arquivo XML o valor alterado conforme acima.
Pegue o projeto completo aqui:
XML_Literals_WF.zip
Rom 13:11
E isso fazei, conhecendo o tempo, que já é hora de despertardes do sono; porque a nossa salvação está agora mais perto de nós do que quando nos tornamos crentes.Referências: