Antes de falar propriamente nos XML Literals, e porque nunca aqui foi referido e será utilizado neste exemplo, 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 efectuada automaticamente pelo compilador.
Isto é bastante útil para LINQ ou para Lambda Expressions e pode ser activado ou desactivado a nível do projecto (Tools - Options - Projects and Solutions - VB Defaults) ou a nível do documento, através da declaração "Option Infer On" ou "Option Infer Off". Por defeito 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, este pretende mostrar como os XML Literals permitem incorporar o XML directamente no código e com isso, conseguir manipular muito facilmente este tipo de ficheiros. 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 ficheiro 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 ficheiro 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 um pesquisa de informação podemos utilizar LINQ to XML. Neste caso, para procurar todos os registo que 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 ficheiro XML.
Para breve mais exemplos sobre XML Literals!
2 comentários:
Muito legal mesmo!!
Marcos Gostei muito do exemplo, so to com um problemão ali você declarou o xml como uma variavel que é a booklist, como faço para colocar esses dados em um arquivo no meu computador
Enviar um comentário