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?
pelo xharbour tem alguma coisa para trabalhar com xml?
Moderador: Moderadores
-
edmarfrazao
- Usuário Nível 3

- Mensagens: 185
- Registrado em: 06 Dez 2005 11:16
- Luciano Bonfim
- Usuário Nível 3

- Mensagens: 414
- Registrado em: 23 Ago 2007 09:34
- Localização: Rio de Janeiro / São Paulo
- Contato:
Re: pelo xharbour tem alguma coisa para trabalhar com xml?
Caro Amigo,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?
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
Muito Obrigado,
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
-
edmarfrazao
- Usuário Nível 3

- Mensagens: 185
- Registrado em: 06 Dez 2005 11:16
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.
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.
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Boa noite colegas.
Segue um código que eu uso para criar XML.
Qualquer dúvida, solta a voz.
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
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)
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)