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.