Ler XML

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Ler XML

Mensagem por Pablo César »

Hoje me vi na necessidade de fazer algo genérico para ler XML e utilizei TXMLDocument da contrib do xHarbour e funciona beleza, vejam o código exemplo adaptado do João Santos - São Paulo (fórum FW):

Código: Selecionar todos

// Compile with xHB

Function Main(cArquivo)
SetMode(25,80)
If cArquivo=NIL
   RetornaConteudoXml("Arqxml.xml")
Else
   RetornaConteudoXml(cArquivo)
Endif
Return

Function RetornaConteudoXml(cFileName)
LOCAL hFile, cXml
LOCAL xmlDoc, xmlIter , xmlNode, cNode, cAttrib, cValue, oCampo, oConteudo

if !file(cFileName)
   Alert("Arquivo "+cFileName+" nao encontrado !")
   Return nil
end
cNode := NIL
cAttrib := NIL
cValue := NIL
hFile := FOpen( cFileName )
xmlDoc := TXmlDocument():New( hFile )
IF xmlDoc:nStatus != 1
   Alert("erro ao ler XML ")
   Return Nil
ENDIF
xmlIter := TXmlIterator():New( xmlDoc:oRoot )
xmlNode := xmlIter:Find()
DO WHILE xmlNode != NIL
   if !empty(xmlNode:cData)
      if subs(xmlNode:cData,1,1) # "<"
         oCampo :=xmlNode:cName
         oConteudo:=xmlNode:cData
      endif
   else
      oCampo :=xmlNode:cName
	  oConteudo:=""
   endif
   
   alert( Padr("Campo...: "+oCampo,70)+";"+;
          Padr("Conteudo: "+oConteudo,70))
	  
   xmlNode := xmlIter:Next()                        // joga pro proximo campo
ENDDO
Return nil 
Eis o conteúdo de um arquivo xml (do CEP exemplo):

Código: Selecionar todos

<?xml version="1.0" encoding="ISO-8859-1"?>
<webservicecep>
<resultado>1</resultado>
<resultado_txt>sucesso - cep completo</resultado_txt>
<uf>RS</uf>
<cidade>Porto Alegre</cidade>
<bairro>Passo D'Areia</bairro>
<tipo_logradouro>Avenida</tipo_logradouro>
<logradouro>Assis Brasil</logradouro>
</webservicecep>
Espero ter contribuído para conhecimento e aprendizado de mais alguém.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Ler XML

Mensagem por Hasse »

Boa tarde Pablo Cesar.

Consegui usa adequadamente a rotina publicada acima.

Contudo, parece que existem outros formatos de XML, que não são lidos. Como se faz neste caso ?
Veja o exemplo de XML abaixo:

Código: Selecionar todos

<?xml version="1.0" encoding="utf-8"?>
<integracao versao="20110901" autorizacao="5P4THj9ZjBB5f8RlmJy4rA==" identificador="ATT0091-0531" geradoEm="31-05-2012 19:52:34" integrador="SKYLAB V 9.0.04">
<requisicoes>
   <requisicao idLis="00737900" dataEntrada="03-05-2012 19:52:34">
      <paciente idLis="PA-00737900" nome="ERONITA DE FATIMA PIRES" sexo="F" dataNasc="26-10-1965"/>
      <amostras>
         <amostra idAmostra="0" idLis="AM-00737900-000" codBarrasOrigem="00737900" descricao="basal" dataLiberacao="31-05-2012" idMaterial="27"/>
      </amostras>
      <exame idLis="EX-00737900-000" amostras="0" idExame="TSH" observacao=""/>
   </requisicao>
   <requisicao idLis="00737901" dataEntrada="03-05-2012 19:52:34">
      <paciente idLis="PA-00737901" nome="MARLI CARDOSO BAEHR" sexo="F" dataNasc="04-09-1970"/>
      <amostras>
         <amostra idAmostra="0" idLis="AM-00737901-000" codBarrasOrigem="00737901" descricao="basal" dataLiberacao="31-05-2012" idMaterial="27"/>
      </amostras>
      <exame idLis="EX-00737901-000" amostras="0" idExame="TSH" observacao=""/>
      <exame idLis="EX-00737901-000" amostras="0" idExame="T4L" observacao=""/>
   </requisicao>
   <requisicao idLis="00737902" dataEntrada="03-05-2012 19:52:34">
      <paciente idLis="PA-00737902" nome="NICOLAS CARVALHO CALHARI" sexo="M" dataNasc="27-04-2011"/>
      <amostras>
         <amostra idAmostra="0" idLis="AM-00737902-000" codBarrasOrigem="00737902" descricao="basal" dataLiberacao="31-05-2012" idMaterial="27"/>
         <amostra idAmostra="1" idLis="AM-00737902-001" codBarrasOrigem="00737902" descricao="basal" dataLiberacao="31-05-2012" idMaterial="15"/>
      </amostras>
      <exame idLis="EX-00737902-000" amostras="0" idExame="TSH" observacao=""/>
      <exame idLis="EX-00737902-000" amostras="0" idExame="T4L" observacao=""/>
      <exame idLis="EX-00737902-001" amostras="1" idExame="GLI" observacao=""/>
   </requisicao>
</requisicoes>
</integracao>
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Ler XML

Mensagem por Pablo César »

Pois é... não tinha visto isso antes, mas agora entendo que nesse formato, não carrega.
Pesquisei na internet e o único visualizador que me agradou e funciona bem é neste link: http://xml-viewer-3-0.soft-free-downloa ... er-3-0.zip e é gratuito.

Neste outro exemplo do colega Alexandre, pode ser que se adapte mais com o que você busca: https://pctoledo.org/forum/viewto ... asa#p70128
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder