Necesito una ayudita con XML

Necesito una ayudita con XML

Postby groiss » Fri Jul 25, 2014 11:30 am

Tengo una base de datos con los medicamentos, antiguamente se actualizaba desde una base de datos Acces, por lo que simplemente exportaba la tabla de acces a DBF y resolvía el problema, ahora ya viene en formato XML, y no se por donde meterle mano.
Mi idea sería desde código ir leyendo el archivo xml, y buscando si el elemento leido está en la DBF, y de no estar añadirlo.
Pero no se como empezar con todo.
Un saludo y mil gracias
groiss
 
Posts: 220
Joined: Tue Sep 01, 2009 7:55 am
Location: Plasencia - ESPAÑA


Re: Necesito una ayudita con XML

Postby karinha » Fri Jul 25, 2014 12:56 pm

Algo asi:

Code: Select all  Expand view

#define CR_LF chr(13) + chr(10)
 
***************
FUNCTION MAIN()
***************
   local lRet := .T.
 
   if !InternetOK()
      Alert("Sem conexão com a Internet. Verifique...")
      return .F.
   endif
   //
   // ABERTURA DAS FUNCOES PARA WEBSERVICE DO XHARBOUR - OBJETO HTTP
   //
   try
      http := CreateObject( "MSXML2.XMLHTTP" )
   catch
      try
         http := CreateObject( "MSXML2.XMLHTTP" )
      catch
         Alert("Erro na criação do objeto MSXML2.XMLHTTP : " + Ole2TxtError())
      end
   end
   //
   // CRIA OBJETO XML
   //
   try
      doc := CreateObject( "MSXML2.DOMDocument" )
   catch
      try
         doc := CreateObject( "MSXML2.DOMDocument" )
      catch
         Alert("Erro na criacao do objeto MSXML2.DOMDocument : " + Ole2TxtError())
         return .F.
      end
   end
 
   cXml := ""
   cXml += '<?xml version="1.0" encoding="ISO-8859-1" ?>' + CR_LF
   cXml += '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">' + CR_LF
   cXml += '  <soapenv:Header/>' + CR_LF
   cXml += '  <soapenv:Body>' + CR_LF
   cXml += '    <tem:ConsultaDadosArquivoSNGPC>' + CR_LF
   cXml += '      <tem:Email>' + SEU_EMAIL_AQUI + '</tem:Email>' + CR_LF
   cXml += '      <tem:Senha>' + SUA_SENHA_AQUI + '</tem:Senha>' + CR_LF
   cXml += '      <tem:CNPJ>' + CNPJ_DA_EMPRESA + '</tem:CNPJ>' + CR_LF
   cXml += '      <tem:Hash>' + HASH_DO_ARQUIVO + '</tem:Hash>' + CR_LF
   cXml += '    </tem:ConsultaDadosArquivoSNGPC>' + CR_LF
   cXml += '  </soapenv:Body> ' + CR_LF
   cXml += '</soapenv:Envelope>' + CR_LF
 
//
// ENDERECO HOMOLOGACAO
//
   http:Open( "POST", "http://homologacao.anvisa.gov.br/sngpc/webservice/sngpc.asmx?WSDL HTTP/1.1", .F. )
   http:SetRequestHeader( "Content-Type"   , "text/xml;charset=ISO-8859-1" )
   http:SetRequestHeader( "SOAPAction"     , "http://tempuri.org/ConsultaDadosArquivoSNGPC" )
   http:SetRequestHeader( "Host"           , "homologacao.anvisa.gov.br" )
 
//
// ENDERECO PRODUCAO
//
// http:Open( "POST", "http://sngpc.anvisa.gov.br/webservice/sngpc.asmx?WSDL HTTP/1.1", .F. )
// http:SetRequestHeader( "Content-Type"   , "text/xml;charset=ISO-8859-1" )
// http:SetRequestHeader( "SOAPAction"     , "http://tempuri.org/ConsultaDadosArquivoSNGPC" )
// http:SetRequestHeader( "Host"           , "sngpc.anvisa.gov.br" )
 
   doc:LoadXML( cXml )
   http:send( doc:xml )
   response  := http:responseText
   oXmlDoc   := TXmlDocument():new()
   oXMlDoc:read( response )
 
   oXmlNode := oXmlDoc:findFirst( "ConsultaDadosArquivoSNGPCResult" )
   cDados   := oXmlNode:cData
 
   oXMlDoc:read( cDados )
 
   oXmlNode := oXmlDoc:findFirst( "DATAVALIDACAO" )
 
   if oXmlNode == NIL .or. oXmlNode:cData == NIL .or. empty( oXmlNode:cData )
      Alert("Arquivo ainda nao foi validado...")
      lRet := .F.
   else
      cMens    := oXmlNode:cData
      oXmlNode := oXmlDoc:findFirst( "MENSAGEMVALIDACAO" )
      if oXmlNode == NIL
         Alert("Arquivo validado em : " + cMens )
      else
         nHandle := fcreate( "temp.txt" )
         fwrite( nHandle, oXmlNode:cData )
         fclose( nHandle )
         nHandle := fopen( "temp.txt" )
         aLinhas := {}
         cLinha  := ""
 
         while HB_FReadLine( nHandle, @cLinha, "[NOVA_LINHA]" ) == 0
            aadd( aLinhas, cLinha )
         enddo
         aadd( aLinhas, cLi
nha )
         fclose( nHandle )
 
         if Alert("Arquivo enviado n„o foi recebido. Emite relat¢rio com erros ?", { "SIM", "NAO" } ) == 1
            // IMPRIME RELATORIO COM ERROS DE VALIDACAO DO XML
         endif
         lRet := .F.
      endif
   endif
RETURN lRet
 
*********************
FUNCTION InternetOK()
*********************
   local aHosts, cName, cAddress := "www.google.com.br"
   InetInit()
   aHosts := InetGetHosts( cAddress )
   if aHosts == NIL .or. len(aHosts) == 0
      InetCleanup()
      return .F.
   endif
   InetCleanup()
RETURN .T.
 
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7206
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Necesito una ayudita con XML

Postby groiss » Mon Jul 28, 2014 9:00 am

Gracias, pero lo que en realidad necesito es extraer los datos del archivo XML, leerlo como si de una base de datos se tratara, pues el documento está en el disco local.
Saludos.
José Luis
groiss
 
Posts: 220
Joined: Tue Sep 01, 2009 7:55 am
Location: Plasencia - ESPAÑA

Re: Necesito una ayudita con XML

Postby hmpaquito » Mon Jul 28, 2014 9:16 am

José Luis,

Antonio Linares, amablemente, fabricó y cedió a la comunidad un xml reader. Creo que te puede servir.
El arranque del proyecto es este viewtopic.php?f=3&t=25741&start=0&hilit=xml+reader
En bitbucket, debe estar, no lo sé, el .exe del xml reader y quizá mas actualizado el codigo.

Saludos.
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Necesito una ayudita con XML

Postby groiss » Tue Jul 29, 2014 6:12 am

Muchas gracias, me pongo a revisarlo y a ver que saco.
Un saludo y mil gracias
José Luis
groiss
 
Posts: 220
Joined: Tue Sep 01, 2009 7:55 am
Location: Plasencia - ESPAÑA

Re: Necesito una ayudita con XML

Postby Manuel Aranda » Fri Mar 20, 2015 6:20 pm

Hola José Luis:

¿ Avanzaste sobre este asunto ? Me encuentro con el mismo problema y me vendría bien algún ejemplo sobre el tema. Gracias.
Un saludo,
Manuel

xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
User avatar
Manuel Aranda
 
Posts: 602
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Re: Necesito una ayudita con XML

Postby VitalJavier » Fri Mar 20, 2015 6:53 pm

Jose Luis, yo leeo un archivo XML para mis facturas asi :

Code: Select all  Expand view

    cFileXml := ".\xml\"+"A"+SubStr(nFactura,2)+".XML"
     nHandle := FOpen(cFileXml,2+16)
        IF nHandle <> -1
            oXml := TXmlDocument():New( nHandle )
            IF oXml:nStatus = HBXML_STATUS_OK
                oNode := oXml:FindFirst("
cfdi:Conceptos")
                IF oNode <> NIL
                   DO WHILE oNode != Nil
                    IF oNode:cName != nil  .AND. upper( oNode:cName ) == "
CFDI:CONCEPTO"
                        IF oNode:GetAttribute("
cantidad") <> NIL
                            nSumaXml += Val(oNode:GetAttribute("
importe"))
                        ENDIF
                    ELSE
                        IF oNode:cName != nil  .AND. upper( oNode:cName ) == "
CFDI:TRASLADO"
                            nSumaXml += Val(oNode:GetAttribute("
importe"))
                        ENDIF
                    ENDIF
                    oNode := oNode:NextInTree()
                    ENDDO                  
                ENDIF
            ENDIF
            FClose(nHandle)
        ENDIF


es una parte de mi fuente, espero y te sirva.
VitalJavier
 
Posts: 227
Joined: Mon Jun 10, 2013 6:40 pm

Re: Necesito una ayudita con XML

Postby Manuel Aranda » Mon Mar 23, 2015 6:50 am

Javier, muchas gracias por el código. ¿Te importaría poner el contenido el fichero XML?
Un saludo,
Manuel

xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
User avatar
Manuel Aranda
 
Posts: 602
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Re: Necesito una ayudita con XML

Postby VitalJavier » Mon Mar 23, 2015 4:13 pm

Manuel, buen dia
Dame tu correo para mandarte un XML que ocupo para facturas
VitalJavier
 
Posts: 227
Joined: Mon Jun 10, 2013 6:40 pm

Re: Necesito una ayudita con XML

Postby Manuel Aranda » Mon Mar 23, 2015 6:37 pm

Aquí lo tienes: arandarosales arroba telefonica punto net
Un saludo,
Manuel

xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
User avatar
Manuel Aranda
 
Posts: 602
Joined: Wed Oct 19, 2005 8:20 pm
Location: España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 10 guests