Sollos 0 #1 Posted December 7, 2006 Vou explicar resumidamente, como se criar um acesso rapido a XML por meio de XML DocumentObject Model(DOM). Primeiro, criei uma tela simples, com os dados básicos de um conta Insira os seguintes componentes: 4 TextBoxes : -txt_conta -txt_pwd -txt_pa -txt_tipo 1 CmdButton: -cmd_abrir 1 ListBox -lst_char **1 CommonDialog(dialogo) - Para Efetuar a captura do path do arquivo xml Abaixo segue o código, todo comentado: Public Sub operaXml(ByVal arqXml As String) 'Metodo que lê e endereça atributos da XMLOn Error Resume NextDim objXml As VariantDim raiz As VariantDim acesso As StringSet objXml = CreateObject("Microsoft.xmlDOM") 'Criando o objeto xmlDOMobjXml.Load (arqXml) 'Carrega o arquivo no path enviado como parametroSet raiz = objXml.documentElement 'Carrega na variavel raiz, o Root do documento xmlIf (raiz.hasChildNodes()) Then 'Se não houver nodos filhos, cancela o carregamento For Each galho In raiz.childNodes ' Para Cada variavel(ChildNode) em Raiz.ChildNode If (raiz.getAttribute("pass") <> "") Then 'Se o atributo -pass- for vazio, retorna String -ERRO!-, senão, retorna o valor do Atributo txt_pwd.Text = raiz.getAttribute("pass") Else txt_pwd.Text = "ERRO!" End If If (raiz.getAttribute("type") <> "") Then 'Se atributo -type- vazio, retorna -ERRO!-, senão, Seleciona um dos casos possiveis.. 2GM, 3GOD e etc.. acesso = raiz.getAttribute("type") Select Case (acesso) Case 1: txt_access.Text = "Normal" Case 2: txt_access.Text = "Gm" Case Is >= 3: txt_access.Text = "GOD" End Select Else txt_access.Text = "ERRO!" End If If (raiz.getAttribute("premDays") <> "") Then 'Se o atributo -premDays- for vazio, retorna String -ERRO!-, senão, retorna o valor do Atributo txt_pa.Text = raiz.getAttribute("premDays") & " dias." Else txt_pa.Text = "ERRO!" End If For Each rama In galho.childNodes ' Para Cada variavel(ChildNode) em galho.ChildNode If (Err.Number <> 0) Then ' Depura Erros lst_char.AddItem ("ERRO!") Else If (rama.getAttribute("name") <> "") Then 'Se não houver erro/atributo nulo, retorna o valor do atributo -name- lst_char.AddItem (rama.getAttribute("name")) End If End If Next NextEnd IfSet objXml = NothingobjXml.CloseEnd SubPrivate Sub cmd_abrir_Click()Dim arquivo As StringDim conta As Stringdialogo.InitDir = "C:" 'Configurando Diretório Default do Dialogodialogo.DialogTitle = "Abrindo Arquivo XML" 'Definindo o titulo da Caixa de Dialogodialogo.Filter = "Arquivos XML(*.xml)|*.xml" 'Define o Filtro da Caixa'Arquivos XML(*.xml) -> É exibido pro usuario / |*.xml -> Define a Extensãodialogo.ShowOpen 'Abre o dialogo'Verificando se o usuario escolheu algum arquivo, caso contrario, msg de erro é exibida e carregamento de arquivo paraIf (dialogo.FileName = "") Then MsgBox "Nenhum Arquivo foi Selecionado", vbInformation, "Erro" Exit SubElse arquivo = dialogo.FileName 'Carrega o path do arquivo para a variavel conta = dialogo.FileTitle conta = Replace(conta, ".xml", "") 'Utiliza o nome do arquivo como exibição de Conta limpaCampos 'Executa Sub de limpeza de campos txt_conta.Text = conta 'Deposita o nome do arquivo no textBox de ContaEnd If'lst_char.FontBold = TrueoperaXml (arquivo) 'Chama a Sub operaXml passando o path do arquivo por parametroEnd SubPrivate Sub limpaCampos()'Limpando Campostxt_conta.Text = ""txt_access.Text = ""txt_pa.Text = ""txt_pwd.Text = ""lst_char.ClearEnd SubAo final, devera apresentar uma saida semelhante a esta: Source(Apenas Fontes - 4kbs) Share this post Link to post Share on other sites
Boleta 1 #2 Posted December 8, 2006 Olá Sollos! Eu não conhecia este método de acesso à XML. Porém, conheço outro que é bem parecido com esse. Ele é um projeto que recebi as fontes de um amigo programador, chamado Neo. Este projeto foi transformado em uma DLL por mim, para melhor uso. Vou fazer um artigo logo logo sobre ela. Sobre o tópico, está excelente, parabéns! Abraços, //Bol~ Share this post Link to post Share on other sites
Zero 0 #3 Posted December 9, 2006 Muito bacana Sollos. Eu usava também a msxml.dll para acessar bancos de dados em XML, mas não fazia dessa maneira. Declarava já os tipos predefinidos. Abraços! Share this post Link to post Share on other sites
Sollos 0 #4 Posted December 10, 2006 É sempre bom trocar informações! Nesse caso eu fiz a varredura em tudo que é canto do XML, poderia ter simplificado só mesmo utilizando o DOM getElements, mas pra demostrar melhor achei assim mais bacana ^^ []'s Share this post Link to post Share on other sites
Guest franco0 #5 Posted January 12, 2007 Uma pergunta,e como so super iniciante, voce tb poderia explica o que cada um dos comandor (ou os mais importantes) fazem, e tb fala onde eu boto tudo isso. SOU UM PIRRALHO SO TENHO 10 ANOS AI MEU DEUS VO MORRE BUAAA (eu quero dizer que pirralhos de des anos nem intendem issu :/) depois eu vo testa no pc da minha mae e ver se consigo tirar minhas duvidas Share this post Link to post Share on other sites
Guest MarioToledo #6 Posted January 15, 2007 ^^, legal velho, programando e aprendendo @franco0 se ta zuando né ? Share this post Link to post Share on other sites