VB.NET - Gerando e manipulando XML
Começo este artigo apresentando uma relação de links de meus artigos sobre XML , então parafraseando aquela famosa música, "para não falar que não falei sobre XML..." |
Apresentando a classe XmlTextWriter
A classe XmlTextWriter fornece uma maneira rápida de gerar streams ou arquivos contendo dados XML em conformidade com a W3C Extensible Markup Language (XML) 1.0. Ela contém diversos métodos e propriedades que vão fazer todo o trabalho pesado para você na prática.
Para usar esta classe basta você usar os namespace System.Xml e criar um
novo objeto XmlTextWriter; em seguida basta ir incluindo os elementos Xml
que você deseja criar. A classe comporta métodos para incluir cada tipo de
elemento em um arquivo XML. A seguir temos alguns destes métodos:
Método | Descrição |
WriterStartDocument | Escreve a declaração XML indicativa da versão XML (version "1.0") |
WriteEndDocument | Fecha qualquer elemento ou atributo aberto. |
Close | Fecha o stream. |
WriteDocType | Escreve a declaração DOCTYPE com o nome especificado e atributos opcionais. |
WriterStartElement | Escreve tag de inicio definida. |
WriteEndElement | Fecha um elemento. |
WriteFullEndElement | Fecha um elemento. |
WriteElementString | Escreve um elemento contendo um valor string. |
WriteStartAttribute | Escreve o início de um atributo. |
WriteEndAttribute | Fecha a chamada anterior de WriteStarttAttribute. |
WriterString | Escreve uma string. |
WriteAttributes | Escreve um atributo com um valor específico.. |
WriteCData | Escreve um bloco <![CDATA[...]]> contendo o texto especificado.. |
WriteComment | Escreve um comentário <!--...--> contendo o texto especificado. |
WriteWhitespace | Escreve um espaço. |
WriteProcessingInstruction | Escreve uma instrução de processamento com um espaço entre o nome e o texto seguido de <?name text?>. |
Se você esta confuso quanto a finalidade de cada método da tabela aconselho a ler os artigos citados no início sobre XML que apresentam os conceitos básicos sobre a linguagem.
De forma geral, para gerar XML usando a classe XmlTexWriter , você vai efetuar os seguintes passos:
Criar um documento;
incluir elementos;
incluir sub-elementos;
incluir atributos;
fechar o documento;
Como exemplo vamos supor que você deseja gerar um arquivo XML chamado filmes.xml contendo informações sobre filmes com a seguinte estrutura:
<?xml version="1.0 encoding="utf-8"> <filmes> <titulo>Casa & Companhia</titulo> <titulo>007 contra Godzila</titulo> <titulo>O segredo do Sr Spock's</titulo> </filmes> |
Este arquivo
contém o cabeçalho padrão XML , a tag root (<filmes>) e os elementos titulos.
|
O código Visual Basic usado para gerar este arquivo poderia ser definido da seguinte forma no Visual Basic 2005 Express Edition.
Inicie o VB 2005 Express e crie um projeto chamado geraXML. A seguir no formulário padrão form1.vb inclua um botão de comando com os dizeres : Gera XML.
No evento Click do botão inclua o seguinte código:
Private Sub Button1_Click(ByVal
sender As
System.Object, ByVal
e As System.EventArgs)
Handles
Button1.Click
Try Dim writer As New XmlTextWriter("filmes.xml", Nothing)
'inicia o documento xml writer.WriteStartDocument()
writer.WriteStartElement("filmes")
'Escreve os sub-elementos writer.WriteElementString("titulo", "Cada & Companhia") writer.WriteElementString("titulo", "007 contra Godzila") writer.WriteElementString("titulo", "O segredo do Dr. Haus's")
' encerra o elemento raiz writer.WriteEndElement()
'Escreve o XML para o arquivo e fecha o objeto escritor writer.Close() MsgBox("Arquivo XML gerado com sucesso.")
Catch ex As Exception MsgBox(ex.Message)
End Try |
Se você quiser incluir um comentário e efetuar a formatação do arquivo deverá incluir as linhas abaixo no código . Você pode inserir estas linhas após o comando writer.WriteStartDocument();
................. writer.Formatting = Formatting.Indented
'escreve um comentário writer.WriteComment("Arquivos de filmes") .............. |
O resultado final obtido será o arquivo filmes.xml com a seguinte estrutura:
<?xml version="1.0"?> <!--Arquivos de filmes--> <filmes> <titulo>Cada & Companhia</titulo> <titulo>007 contra Godzila</titulo> <titulo>O segredo do Dr. Haus's</titulo> </filmes> |
Vamos supor que você deseja incluir atributos nas suas tags XML . No exemplo vamos incluir o atributo ano para indicar o ano de referência dos filmes; nosso arquivo filmes.xml deverá ter o seguinte formato:
<?xml version="1.0"?> <!--Arquivos de filmes--> <filmes ano="2007"> <titulo>Cada & Companhia</titulo> <titulo>007 contra Godzila</titulo> <titulo>O segredo do Dr. Haus's</titulo> </filmes> |
O código para obter este resultado é obtido usando o método WriteAttributeString();
Private Sub Button1_Click(ByVal
sender As
System.Object, ByVal
e As System.EventArgs)
Handles
Button1.Click
Try Dim writer As New XmlTextWriter("filmes.xml", Nothing)
writer.WriteStartDocument()
writer.Formatting = Formatting.Indented
'escreve um comentario writer.WriteComment("Arquivos de filmes")
'escreve o elmento raiz writer.WriteStartElement("filmes")
'escrever o atributo ano com valor 2007 writer.WriteAttributeString("ano", "2007")
'Escreve os sub-elementos writer.WriteElementString("titulo", "Cada & Companhia") writer.WriteElementString("titulo", "007 contra Godzila") writer.WriteElementString("titulo", "O segredo do Dr. Haus's")
' encerra o elemento raiz writer.WriteEndElement()
'Escreve o XML para o arquivo e fecha o objeto escritor writer.Close() MsgBox("Arquivo XML gerado com sucesso.")
Catch ex As Exception MsgBox(ex.Message)
End Try |
Você pode usar e abusar dos recursos da classe XmlTextWriter para gerar arquivos XML com qualquer elementos e atributos.
Com base no exemplo acima poderíamos usar o seguinte código:
Private Sub Button2_Click(ByVal
sender As
System.Object, ByVal
e As System.EventArgs)
Handles
Button2.Click
'inicia o documento xml writer.WriteStartDocument()
writer.Formatting = Formatting.Indented
'Escreve o elemento raiz writer.WriteStartElement("filmes")
'Inicia um elemento writer.WriteStartElement("filme")
'Inclui um atributo ao elemento writer.WriteAttributeString("classificacao", "R")
'e sub-elementos writer.WriteElementString("titulo", "Matrix") writer.WriteElementString("formato", "DVD")
'encerra os elementos itens writer.WriteEndElement()
' encerra o item 'escreve alguns espaços entre os nodeswriter.WriteWhitespace("" & Chr(10) & "")
'escreve um segundo elemento usando um raw de dados strings writer.WriteRaw("<filme>" + "<titulo>007 contra Godzila</titulo>" + "<formato>DVD</formato>" + "</filme>")
'escreve o terceiro elemento na string writer.WriteRaw("" & Chr(10) & " <filme>" & Chr(10) & "" + " <titulo>O segredo do Dr. Hauss´s</titulo>" & Chr(10) & "" + " <formato>CD</formato>" & Chr(10) & "" + " </filme>" & Chr(10) & "")
' encerra o elemento raiz writer.WriteFullEndElement()
'escreve o XML para o arquivo e fecha o escritor writer.Close() End Sub |
O arquivo XML obtido que eu chamei de filmes2.xml, para não sobrepor o arquivo anterior, teria a seguinte estrutura:
<?xml version="1.0"?> <filmes> <filme classificacao="R"> <titulo>Matrix</titulo> <formato>DVD</formato> </filme> <filme><titulo>007 contra Godzila</titulo><formato>DVD</formato></filme> <filme> <titulo>O segredo do Dr. Haussïs</titulo> <formato>CD</formato> </filme> </filmes> |
Note que estou usando o método WriteRaw para escrever uma string contendo elementos e outros comandos de formatação.
A forma mais simples de exibir o conteúdo do arquivo XML gerado é usar o método ReadXml do objeto dataset . Vamos incluir um novo botão no formulário do projeto com o texto - Exibe XML e no seu evento Click incluir o código abaixo:
Private Sub Button3_Click(ByVal sender
As System.Object, ByVal
e As System.EventArgs)
Handles Button3.Click Dim ds As New DataSet ds.ReadXml("filmes.xml") DataGridView1.DataSource = ds.Tables(0).DefaultView End Sub |
Executando o projeto e exibindo o xml gerado teremos o seguinte resultado:
O comando ReadXml irá inferir o esquema do arquivo e construir a tabela equivalente com os dados XML. Existe também o método ReadXmlSchema para ler um esquema pré-definido.
O mesmo exemplo para uma página ASP.NET poderia usar o seguinte código para ler o arquivo xml:
protected sub ReadXmlDemo ( )
' inicializa o objeto
dim ds as new DataSet ( );
' le o arquivo xml em um dataset
ds.ReadXml ( Server.MapPath ( "/filmes.xml" ) )
' chama o método para exibir o conteúdo do dataset
exibeDados ( ds )
end sub
|
O método WriteXml pode ser usado para gerar um arquivo XML e opcionalmente o seu esquema para um o objeto dataset.
Abaixo temos um exemplo onde o método WriteXML é usado para criar um arquivo XML a partir de um dataset.
imports
System.Xml
Imports
System.IO
' cria um arquivo Dim arquivo As String = "arquivo.xml" ' Cria um FileStream para escrita Dim mFileStream As New FileStream(arquivo, FileMode.Create)
' Cria um XmlTextWriter com o fileStream. Dim mXmlWriter As New XmlTextWriter(mFileStream,Encoding.Unicode)
' escreve para o arquivo usando o método WriteXml ds.WriteXml(mXmlWriter) mXmlWriter.Close()
End Sub |
Manipular e criar arquivos XML com os novos recursos do .NET Framework 2.0 é muito simples.
Apenas para você comparar , e, para matar a curiosidade, abaixo transcrevo um código geralmente usado para gerar arquivo XML usando ASP e ADO.
<!-- #include
file="adovbs.inc" --> <% ' verifica se o arquivo existe usando o objeto FileSystemObject Dim oFSO Set oFSO = Server.CreateObject("Scripting.FileSystemObject") 'se o arquivo existir deleta-o If oFSO.FileExists(Server.MapPath("arquivo.xml")) Then oFSO.DeleteFile Server.MapPath("arquivo.xml") End IF
Set oFSO = Nothing |
Dá para sentir saudades ???
Nota: Com ASP.NET também temos a disposição o XMLDataSource. Para saber mais veja o meu artigo: ASP .NET - Usando XmlDataSource
Pegue o projeto completo aqui : geraXML.zip
Até o próximo artigo .NET
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
C# - Lendo, Incluindo e Atualizado dados de uma planilha ...