XML Processing
XML Processing
No modelo de SAX, você pode usar as classes XmlReader e XmlWriter para trabalhar com dados
XML. A classe XmlReader é usada para ler dados XML de forma rápida, Avançar-only e não-cache.
Ele lê um documento XML ou um fluxo.
Exemplo 1
Este exemplo demonstra a leitura de dados XML do movies.xml arquivo.
Siga os seguintes passos:
Adicione o arquivo movies.xml na pasta bin\Debug do seu aplicativo.
Importar o namespace System. xml no arquivo Form1. vb.
Adicione um rótulo no formulário e altere seu texto para 'Filmes Galore'.
Adicionar três caixas de listagem e três botões para mostrar o título, o tipo e a descrição de
um filme do arquivo xml.
Adicione o seguinte código usando a janela do editor de código.
Imports System.Xml
Public Class Form1
Executar e executar o código acima usando o botão de arranque disponível na barra de ferramentas
do Microsoft Visual Studio. Clicando nos botões exibiria, título, tipo e descrição dos filmes do
arquivo..
A classe XmlWriter é usada para gravar dados XML em um fluxo, um arquivo ou um objeto
TextWriter. Ele também funciona em uma maneira de Somente-Avançar, não em cache.
Exemplo 2
Vamos crie um arquivo XML, adicionando alguns dados em tempo de execução. Siga os seguintes
passos:
Adicione um controle WebBrowser e um controle button no formulário.
Altere a propriedade texto do botão para mostrar arquivo de autores.
Adicione o seguinte código no editor de código.
Imports System.Xml
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Definir o texto da barra de legenda do formulário.
Me.Text = "tutorialspoint.com"
End Sub
Executar e executar o código acima usando o botão de arranque disponível na barra de ferramentas
do Microsoft Visual Studio. Clicando no arquivo autor mostrar exibiria o arquivo recém-criado
Authors XML no navegador da web.
Análise de XML com DOM API
De acordo com o documento Object Model (DOM), um documento XML é composto por nós e
atributos de nós. A classe XmlDocument é usada para implementar o analisador de XML DOM
do .net Framework. Ele também permite que você modificar um documento XML existente ao
inserir, excluir ou atualizar dados no documento.
A seguir estão alguns dos métodos comumente utilizados da classe XmlDocument:
Exemplo 3
Neste exemplo, vamos inserir alguns novos nós no documento xml Authors. xml e em seguida,
mostrar todos os nomes dos autores primeiro em uma caixa de listagem.
Siga os seguintes passos:
Adicionar o arquivo Authors XML na pasta bin/Debug do seu aplicativo (deve estar lá se
você já tentou o último exemplo)Import the System.Xml namespace
Adicione uma caixa de listagem e um controle button no formulário e defina a propriedade
de texto do Controle button para mostrar os autores.
Adicione o seguinte código usando o editor de código.
Imports System.Xml
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Definir o texto da barra de legenda do formulário.
Me.Text = "tutorialspoint.com"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles
Button1.Click
ListBox1.Items.Clear()
Dim xd As XmlDocument = New XmlDocument()
xd.Load("authors.xml")
Dim newAuthor As XmlElement = xd.CreateElement("author")
newAuthor.SetAttribute("code", "6")
Dim fn As XmlElement = xd.CreateElement("fname")
fn.InnerText = "Bikram"
newAuthor.AppendChild(fn)
Dim ln As XmlElement = xd.CreateElement("lname")
ln.InnerText = "Seth"
newAuthor.AppendChild(ln)
xd.DocumentElement.AppendChild(newAuthor)
Dim tr As XmlTextWriter = New XmlTextWriter("movies.xml", Nothing)
tr.Formatting = Formatting.Indented
xd.WriteContentTo(tr)
tr.Close()
Dim nl As XmlNodeList = xd.GetElementsByTagName("fname")
For Each node As XmlNode In nl
ListBox1.Items.Add(node.InnerText)
Next node
End Sub
End Class
Executar e executar o código acima usando o botão de arranque disponível na barra de ferramentas
do Microsoft Visual Studio. Clicar no botão Mostrar autor exibiria os primeiros nomes de todos os
autores, incluindo o que adicionamos em tempo de execução.
Cara, eu faço a importação dos xmls das NFes tanto de clientes, fornecedores ou nossas próprias,
para o meu controle interno.
Antes eu usava uma função bem rudimentar, que lia item a item e dava muita dor de cabeça, ainda
mais quando os xmls diferiam de padrão (atualmente está bem raro, mas as vezes aparece ainda um
xml que não contenha algum tipo de tag que deveria existir...como isso acontece eu não sei, pq vem
dos fornecedores ou clientes as nfs).
Depois de apanhar muito eu finalmente entendi como usar um dataset para ler a nfe, aí ficou bem
mais fácil.
Eu faço assim:
Dim xmlDoc As New XmlDocument
xmlDoc.Load(sXML)
bdsAux.Current("Id").ToString
'Aqui eu to buscando o ID da nfe!
'E para mudar de tag, mesmo sendo filho ou não da tag pai, faça:
bdsAux.DataMember = "ide"
É muito mais fácil do que usar o outro método (na minha opnião é claro) em que vc tem que usar o
navigator etc...
Qualquer dúvida, só perguntar!
Att.
Giovani
******** OBS: no exemplo de código, nem precisa das duas primeiras linhas. Eu fui extraindo
partes de códigos do meu sistema e acabei colando código antigo em desuso. A variável sXML é o
caminho do arquivo ok?
or favor não se esqueça de fazer as mudanças de "tag" no dataset dentro de um bloco try catch.
Isso vale também para quando vc for tentar acessar um membro da tag. Se caso a tag ou membro da
tag não existir, o seus sistema não cai!!! rsrsrs Digo isso pq várias vezes esqueci disso...e de repente
o sistema caia...
Lógico que se começar a faltar muita tag, possivelmente o xml está com defeito. Mas ultimamente
isso é raro. No começo das nfe's que era terrível!
Para ler o arquivo Xml em questão usaremos o classe “XmlDocument” da framework 2.0 que
estamos usando no momento. Vamos pegar somente o Nome, Especialidade e Crm do Médico em
questão, faremos então o procedimento a baixo:
Private Sub LeXml()
objXml.Load(CaminhoXml)
End Sub
Estou falando para Selecionar a Tag 'Medicos' que é a Tag pai, atraves do método
'SelectSingleNode' que é do objeto 'objXml', onde eu posteriormete pego o primeiro Noh filho de
Tag Pai ou seja a Tag chamada 'Nome', faço isso quando digito:
.ChildNodes(0).InnerText
Reparem que esta escrito 'ChildNodes(0)' isso se refere ao primeiro XPath ou seja o primeiro Noh
da Tag Pai 'Medicos' visto que eu tenho mais de um Noh dentro dela. Fiz uma imagem de como
seria o XPath da estrutura de caminhos para ler a XML em questão:
Vendo os números poderemos ter uma ideia de como teremos que ler os outros Nohs que estão no
arquivo Xml. Faremos então o precedimento completo, como mostrado a abaixo:
Private Sub LeXml()
objXml.Load(CaminhoXml)
Dim UF As String =
objXml.SelectSingleNode("Medicos").ChildNodes(3).ChildNodes(5).InnerText
End Sub
Espero que tenham gostado, pois é muito util no dia-a-dia para quem trabalha com desenvolvimento
e tentei exemplificar de uma forma bem simples mesmo, é claro que podemos montar uma classe
'objeto' para podemos ler uma xml e resgatar seus valores etc, mas o intuito aqui foi mostrar apenas
como se chega a um determinado Noh de uma XML.