O Visual Basic ganhou, na versão 9, os XML Literals. Um literal é algo
muito simples, é uma maneira de criar um tipo sem precisar escrever New
AlgumaClasse (“algum parâmetro”). Mas, antes de falar propriamente nos XML Literals, que será utilizado nestes exemplos, vou falar um pouco sobre a declaração Option Infer.
Option Infer
A declaração Option Infer On permite que não se indique o tipo de variável, sendo esta identificada efetuada automaticamente pelo compilador.
Isso é bastante útil para LINQ ou para Lambda Expressions e pode ser ativado ou desativado no nível do projeto (Tools – Options – Projects and Solutions – VB Defaults) ou no nível do documento, através da declaração “Option Infer On” ou “Option Infer Off”. Por padrão, está definido para “On”.
Vejamos estas declarações:
Dim str = "Exemplo"
Dim int = 123
Dim dbl = 12.3
Dim list = New List(Of Integer)
Nestes exemplos, e caso esteja definido Option Infer On, as variáveis serão definidas como str = String, int = Integer, dbl = Double e list as System.Collections.Generics.List(of T).
É o mesmo que fazer:
Dim str As String = "Exemplo"
Dim int As Integer = 123
Dim dbl As Double = 12.3
Dim list As New List(Of Integer)
Caso estivesse definido como Option Infer Off, todas as variáveis ficariam definidas como Object, e não o tipo desejado.
XML Literals
Passando ao tema principal deste artigo, vamos mostrar como os XML Literals permitem incorporar o XML diretamente no código e, com isso, conseguir manipular muito facilmente esse tipo de arquivos. Os XML Literals estão disponíveis a partir do Visual Studio 2008, suportando a maioria da especificação Extensible Markup Language (XML) 1.0.
Este exemplo cria, em modo runtime, a estrutura de um arquivo XML, com alguns dados, estando disponível intellissence e auto-indenting do texto:
Dim bookList = _
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Lista de livros e revistas -->
<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>
<magazine>
<magazinename>"MSDN Magazine"</magazinename>
<magazinename>"Code Magazine"</magazinename>
</magazine>
</library>
Com base no arquivo criado, e para listar todas as revistas, indicando o caminho da estrutura XML até ao elemento pretendido, podemos criar um ciclo For Each:
For Each m In From element In bookList.<library>.<magazine>.<magazinename>
Debug.WriteLine(m.Value)
Next
Este é um método mais prático de o fazer, sem ser necessário indicar o caminho para o elemento pretendido, utilizando a propriedade Descendants, que irá retornar todos os elementos descendentes que encontre na descrição especificada entre as chavetas <>:
For Each m In From element In bookList...<magazinename>
Debug.WriteLine(m.Value)
Next
Para listar os livros, o processo é semelhante, mas desta vez como o Nome e o Autor estão como atributos, utiliza-se o caracter “@” para indicar qual o atributo a ler:
For Each book In From element In bookList...<book>
Debug.WriteLine("Livro: " & book.@name.ToString)
Debug.WriteLine("Autor: " & book.@author.ToString)
' Linha de separação
Debug.WriteLine(New String("-"c, 40))
Next
Para uma pesquisa de informação, podemos utilizar LINQ to XML. Neste caso, para procurar todos os registros com a palavra “Selo”:
Dim bookSearch = From b In bookList...<book> _
Where b.@name.ToString.Contains("Selo") _
Select b.@name, b.@author
For Each book In From element In bookSearch
Debug.WriteLine("Livro: "& book.name)
Debug.WriteLine("Autor: " & book.author)
' Linha de separação
Debug.WriteLine(New String("-"c, 40))
Next
Finalmente, podemos gravar para o disco o XML que se encontra em memória
bookList.Save("d:\LivrosRevistas.xml")
É um exemplo simples de como ler informação utilizando XML Literals e LINQ to XML, que mostra que nunca foi tão fácil trabalhar com arquivos XML.
Para breve, mais exemplos sobre XML Literals!