Página 1 de 1

pelo xharbour tem alguma coisa para trabalhar com xml?

Enviado: 23 Ago 2007 16:16
por edmarfrazao
Estou desenvolvendo um modulo para as Farmacias e tem que gerar um arquivo no padrao XML da anvisa ref. ao GNGPC.



pelo xharbour tem alguma coisa para trabalhar com xml?

Re: pelo xharbour tem alguma coisa para trabalhar com xml?

Enviado: 23 Ago 2007 16:22
por Luciano Bonfim
edmarfrazao escreveu:Estou desenvolvendo um modulo para as Farmacias e tem que gerar um arquivo no padrao XML da anvisa ref. ao GNGPC.



pelo xharbour tem alguma coisa para trabalhar com xml?
Caro Amigo,

XML nada mais é que um arquivo texto metido a besta rsrs, então para você gerar um xml basta criar um arquivo Texto no formato especificado pela Anvisa e depois salvar ele com a extensão XML

ex.: variavel="<minhatag>" + conteudodeumcampoqq + "</minhatag>"

...

e por ai vai

Enviado: 25 Ago 2007 09:06
por edmarfrazao
estava procurando uma maneira mais facil de trabalhar com o xml.

Achei em delphi.

Como varios programadores do xharbor também usam delphi aqui vai a solução que achei.

Consegui fazer o xml funciona.

Descobri um componente do delphi o


Abra um projeto.

va em file,new,other,xml(so aparece com um projeto aberto)
e escolha
XML Data Binding ( e um winzard).
sera solicitador o arquivo

sngpc200707v1_0.xsd ( esta no site da aniva)

com isto ele ira criar uma unit com toda a implementação do arquivo XML.

Se estiver no delphi 2006, depois que criar a unit, aproveite para usar o Model view e criar a UML(e automatico), da classe.


depois coloque um componente xmldocument

e implemente as chamadas as funções que forem necessario
e o xmldocumento irar gerar o arquivo xml

com pouco esforço.

Enviado: 25 Ago 2007 21:34
por Hasse
Boa noite colegas.
Segue um código que eu uso para criar XML.

Código: Selecionar todos

*  Variáveis.

c_enter      := CHR(13) + CHR(10)
c_cabremessa := '<?xml version="1.0" encoding="ISO-8859-1" ?>'
c_id         := "050505a"
c_LabCod     := '3809'
c_protocol   := "1"
c_DataPed    := c_ano + "-" + c_mes + "-" + c_dia
c_HoraPed    := TIME()
c_DataLote   := c_ano + "-" + c_mes + "-" + c_dia
c_HoraLote   := TIME()
c_DataColeta := c_ano + "-" + c_mes + "-" + c_dia
c_HoraColeta := TIME()
c_nome       := ALLTRIM(P_NOME)
c_cod        := RIGHT(P_COD,06)

*==================================================================================================

      c_texto := c_cabremessa                                              + c_enter
      c_texto += "<Registro>"                                              + c_enter
      c_texto += "  <ID>"                + c_id         + "</ID>"          + c_enter
      c_texto += "  <Protocolo>"         + c_protocol   + "</Protocolo>"   + c_enter
      c_texto += "  <!-- Pedido de Exames -->"                             + c_enter
      c_texto += "  <Lote>"                                                + c_enter
      c_texto += "    <CodLab>"          + c_LabCod     + "</CodLab>"      + c_enter
      c_texto += "    <CodLoteLab>"      + c_CodLoteLab + "</CodLoteLab>"  + c_enter
      c_texto += "    <DataLote>"        + c_DataLote   + "</DataLote>"    + c_enter
      c_texto += "    <HoraLote>"        + c_HoraLote   + "</HoraLote>"    + c_enter
      c_texto += "    <Pedido>"                                            + c_enter
      c_texto += "      <CodPedLab>"     + c_cod        + "</CodPedLab>"   + c_enter
      c_texto += "      <DataPed>"       + c_DataPed    + "</DataPed>"     + c_enter
      c_texto += "      <HoraPed>"       + c_HoraPed    + "</HoraPed>"     + c_enter
      c_texto += "      <Paciente>"                                        + c_enter
      c_texto += "        <CodPacLab>"   + c_cod        + "</CodPacLab>"   + c_enter
      c_texto += "        <Nome>"        + c_nome       + "</Nome>"        + c_enter
      IF ! EMPTY(c_nasc)
         c_texto += "        <DataNasc>" + c_nasc       + "</DataNasc>"    + c_enter
      ENDIF
      IF ! EMPTY(c_idade) .AND. RIGHT(ap_idad,01) = "a"
         c_texto += "        <IdadeAno>" + c_idade      + "</IdadeAno>"    + c_enter
      ELSEIF ! EMPTY(c_idade) .AND. RIGHT(ap_idad,01) = "m"
         c_texto += "        <IdadeMes>" + c_idade      + "</IdadeMes>"    + c_enter
      ENDIF
      IF ! EMPTY(A->P_SEX)
         c_texto += "        <Sexo>"     + c_sex        + "</Sexo>"        + c_enter
      ENDIF
      c_texto += "      </Paciente>"                                      + c_enter
      *
      *---------------------------------- Iserir os exames no texto ------------------------------
      c_log := ""
      *
      FOR nConta = 1 TO n_exames
         *
         IF Ctrl_rem[nConta] = "N"
            LOOP
         ENDIF
         *--------------------------------------- Busca o código do exame no TRADUTOR ------------
         c_exa1  := c_CodLab + vetexa[nConta]
         c_log   += vetexa[nConta] + "Å"
         SELE 21
         LOCATE FOR TIP + TCOD1 = c_exa1
         IF ! FOUND()
            ALERT("Exame '" + vetexa[nConta] + "' nÆo cadastrado no TRADUTOR ;" +;
                  "Opera‡Æo CANCELADA... ;;" +;
                  "Cadastre e repita a opera‡Æo")
            l_exit   := .T.
            l_return := .F.
            EXIT
         ENDIF
         c_exame   := ALLTRIM(TCOD2)
         *---------------------------------- Busca os dados no arquivo EXAMEHPD do xXxXxXxXxX ---- 
         SELE 22
         LOCATE FOR ALLTRIM(EHP_CODIGO) == c_exame
         IF ! FOUND()
            ALERT("Exame " + c_exame + " nÆo consta no arquivo xXxXxXxXxX ;" +;
                  "Opera‡Æo CANCELADA... ;;" +;
                  "Verifique, corrija e repita a opera‡Æo")
            l_exit   := .T.
            l_return := .F.
            EXIT
         ENDIF
         *
         aMatriz := {}					&& Verifica se tem mais exames com o mesmo código
         DO WHILE ALLTRIM(EHP_CODIGO) == c_exame	&& mas com outros Materiais de Coleta, e neste
            IF ALLTRIM(EHP_CODIGO) == c_exame		&& caso arquiva estes na matriz aMaterial.
               AADD(aMatriz,EHP_MATERI+EHP_CONSER)
               SKIP
            ELSE
               EXIT
            ENDIF
         ENDDO
         *--------------------------------------------------------------------------------------
         IF LEN(aMatriz) > 1
            cTela := SAVESCREEN(08,29,20,57)
            c_cor := SETCOLOR(cor_7)
            SCROLL(08,29,20,57)
            @ 08,29 TO 20,57
            @ 09,31 SAY 'Exame "' + vetexa[nConta] + '" apresenta mais'
            @ 10,31 SAY 'de um Material de Coleta.'
            @ 11,31 SAY '-- Fa‡a a sua Escolha ! --'
            @ 12,30 TO 12,56
            n_opcao = ACHOICE(13,39,19,45,aMatriz)		&& Escolha do Material adequado.
            SETCOLOR(c_cor)
            RESTSCREEN(08,29,20,57,cTela)
            c_mater  := ALLTRIM(LEFT(aMatriz[n_opcao],05))
            c_conser := ALLTRIM(RIGHT(aMatriz[n_opcao],50))
         ELSE
            c_mater  := ALLTRIM(LEFT(aMatriz[1],05))
            c_conser := ALLTRIM(RIGHT(aMatriz[1],50))
         ENDIF
         *
         c_volume := ""
         IF c_mater = "U-24"
            cTela := SAVESCREEN(08,29,20,57)
            c_cor := SETCOLOR(cor_8)
            SCROLL(08,29,20,57)
            @ 08,29 TO 20,57
            @ 10,34 SAY 'Digite o volume da'
            @ 12,34 SAY 'amostra:        ml'
            c_volume := "    "
            @ 12,43 GET c_volume PICT "9999"
            READ
            c_volume := ALLTRIM(c_volume)
            RESTSCREEN(08,29,20,57,cTela)
         ENDIF
         *
         *-------------------------------------- Insere os exames no texto ---------------------
         *
         c_exame := c_mater + "|" + c_exame + "|" + "1"
         c_texto += "      <Exame>"                                                  + c_enter
         c_texto += "        <DataColeta>"      + c_DataColeta   + "</DataColeta>"   + c_enter
         c_texto += "        <HoraColeta>"      + c_HoraColeta   + "</HoraColeta>"   + c_enter
         c_texto += "        <CodExmApoio>"      + c_exame   + "</CodExmApoio>"   + c_enter
         *-------------------------------------- Insere o conservante --------------------------
         *
         IF ! EMPTY(c_conser)
            c_texto += "        <Conservante>"   + c_conser  + "</Conservante>"   + c_enter
         ENDIF
         *-------------------------------------- Insere o volume da amostra --------------------
         *
         IF ! EMPTY(c_volume)
            c_texto += "        <VolumeDiurese>"   + c_volume  + "</VolumeDiurese>"   + c_enter
         ENDIF
         *
         c_texto += "      </Exame>"                                              + c_enter
         *--------------------------------------------------------------------------------------
      NEXT n_conta
      *
      SELE 1
      *
      IF l_exit
         EXIT
      ENDIF
      *
      c_texto += "    </Pedido>"                                          + c_enter
      c_texto += "  </Lote>"                                              + c_enter
      c_texto += "</Registro>"
      *
      *------------------------------------- Gravar texto de remessa ---------------------------
      nFhandle := Fcreate( c_arq, 0 )
      Fwrite( nFhandle, c_texto )
      FClose( nFhandle )
      RELEASE c_texto
Qualquer dúvida, solta a voz.