Clipper On Line • Ver Tópico - XML - Dúvidas

XML - Dúvidas

Discussão sobre a linguagem CA-Clipper.

Moderador: Moderadores

 

XML - Dúvidas

Mensagempor Mário Isa » 04 Dez 2006 14:14

Alô Amigos, estou no processo de homologação do farmácia popular.

Me deram a seguinte informação:

A.1) Processo de Solicitação de Pré-Autorização - 1ª FASE.

Clique aqui para ver a imagem do processo

O estabelecimento (farmácia / drogaria / concentrador) enviará ao método executarSolicitacao() do Web Service do Ministério da Saúde* o XML Solicitação de Pré-Autorização ESTABELECIMENTO contendo os seguintes dados:

- SolicitacaoDTO (clique aqui para ver a especificação do complexType descrito no Autorizador.wsdl.xml)
1. Código da solicitação. Este é um número gerado pelo estabelecimento para identificar a sua transação.
2. CNPJ do estabelecimento.
3. CPF do paciente.
4. CRM do médico que emitiu a prescrição.
5. Unidade Federativa que emitiu o CRM do médico prescritor.
6. Data de emissão da prescrição. Não pode ser superior a 180 dias.
7. Lista de medicamentos onde cada item deverá ser enviado:

- MedicamentoDTO (clique aqui para ver a especificação do complexType descrito no Autorizador.wsdl.xml)
7.1. Código de barras (EAN) da apresentação do medicamento a ser dispensado.
7.2. Quantidade solicitada (em comprimidos ou ml).
7.3. Valor unitário de venda da apresentação.
7.4. Quantidade diária prescrita (Posologia em comprimidos ou ml). Para o caso da INSULINA infomar o valor 1.

- UsuarioFarmaciaDTO (clique aqui para ver a especificação do complexType descrito no Autorizador.wsdl.xml)
8. Login da Farmácia. Caso a Farmácia utilize concentrador, informar o login do concentrador.
9. Senha da Farmácia. Caso a Farmácia utilize concentrador, informar a senha do concentrador.

Ao receber o XML acima, o Ministério da Saúde processará a requisição e retornará o XML Retorno da Pré-Autorização DATASUS contendo os seguintes dados:


Vejam o arquivo que tenho que mandar só para pedir a autorização:

<?xml version="1.0" encoding="UTF-8" ?>
- <wsdl:definitions targetNamespace="http://service.datasus.org/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://service.datasus.org/" xmlns:intf="http://service.datasus.org/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <!--
WSDL created by Apache Axis version: 1.3
Built on Oct 05, 2005 (05:23:37 EDT)

-->
- <wsdl:types>
- <schema targetNamespace="http://service.datasus.org/" xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
- <complexType name="MedicamentoDTO">
- <sequence>
<element name="coCodigoBarra" nillable="true" type="xsd:string" />
<element name="dsUnidApresentacao" nillable="true" type="xsd:string" />
<element name="inAutorizacaoEstorno" nillable="true" type="xsd:string" />
<element name="inAutorizacaoMedicamento" nillable="true" type="xsd:string" />
<element name="qtAutorizada" type="xsd:double" />
<element name="qtDevolvida" type="xsd:double" />
<element name="qtEstornada" type="xsd:double" />
<element name="qtPrescrita" type="xsd:double" />
<element name="qtSolicitada" type="xsd:double" />
<element name="statusTransacao" nillable="true" type="xsd:string" />
<element name="vlPrecoSubsidiadoMS" type="xsd:double" />
<element name="vlPrecoSubsidiadoPaciente" type="xsd:double" />
<element name="vlPrecoSubsidiadoPacientePosEstorno" type="xsd:double" />
<element name="vlPrecoVenda" type="xsd:double" />
<element name="vlrSubsidiadoMSPosEstorno" type="xsd:double" />
<element name="vlrTotalVendaPosEstorno" type="xsd:double" />
</sequence>
</complexType>
- <complexType name="ArrayOfMedicamentoDTO">
- <complexContent>
- <restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType" wsdl:arrayType="impl:MedicamentoDTO[]" />
</restriction>
</complexContent>
</complexType>
- <complexType name="SolicitacaoDTO">
- <sequence>
<element name="arrMedicamentoDTO" nillable="true" type="impl:ArrayOfMedicamentoDTO" />
<element name="coSolicitacaoFarmacia" nillable="true" type="xsd:string" />
<element name="dtEmissaoReceita" nillable="true" type="xsd:dateTime" />
<element name="nuCnpj" nillable="true" type="xsd:string" />
<element name="nuCpf" nillable="true" type="xsd:string" />
<element name="nuCrm" nillable="true" type="xsd:string" />
<element name="sgUfCrm" nillable="true" type="xsd:string" />
</sequence>
</complexType>
- <complexType name="UsuarioDTO">
- <sequence>
<element name="senha" nillable="true" type="xsd:string" />
<element name="usuario" nillable="true" type="xsd:string" />
</sequence>
</complexType>
- <complexType name="UsuarioFarmaciaDTO">
- <complexContent>
- <extension base="impl:UsuarioDTO">
<sequence />
</extension>
</complexContent>
</complexType>
- <complexType name="AutorizacaoDTO">
- <sequence>
<element name="arrMedicamentoDTO" nillable="true" type="impl:ArrayOfMedicamentoDTO" />
<element name="coSolicitacaoFarmacia" nillable="true" type="xsd:string" />
<element name="descMensagemErro" nillable="true" type="xsd:string" />
<element name="inAutorizacaoSolicitacao" nillable="true" type="xsd:string" />
<element name="noPessoa" nillable="true" type="xsd:string" />
<element name="nuAutorizacao" nillable="true" type="xsd:string" />
</sequence>
</complexType>
- <complexType name="ConfirmacaoDTO">
- <sequence>
<element name="coSolicitacaoFarmacia" nillable="true" type="xsd:string" />
<element name="descMensagem" nillable="true" type="xsd:string" />
<element name="nuAutorizacao" nillable="true" type="xsd:string" />
<element name="nuCupomFiscal" nillable="true" type="xsd:string" />
</sequence>
</complexType>
- <complexType name="ConfirmacaoAutorizacaoDTO">
- <sequence>
<element name="arrMedicamentoDTO" nillable="true" type="impl:ArrayOfMedicamentoDTO" />
<element name="coSolicitacaoFarmacia" nillable="true" type="xsd:string" />
<element name="descMensagemErro" nillable="true" type="xsd:string" />
<element name="inAutorizacaoSolicitacao" nillable="true" type="xsd:string" />
<element name="noPessoa" nillable="true" type="xsd:string" />
<element name="nuAutorizacao" nillable="true" type="xsd:string" />
<element name="nuCupomFiscal" nillable="true" type="xsd:string" />
<element name="statusConfirmacao" nillable="true" type="xsd:string" />
</sequence>
</complexType>
- <complexType name="RecebimentoDTO">
- <sequence>
<element name="arrMedicamentoDTO" nillable="true" type="impl:ArrayOfMedicamentoDTO" />
<element name="nuAutorizacao" nillable="true" type="xsd:string" />
<element name="nuCupomFiscal" nillable="true" type="xsd:string" />
</sequence>
</complexType>
- <complexType name="ConfirmacaoRecebimentoDTO">
- <sequence>
<element name="arrMedicamentoDTO" nillable="true" type="impl:ArrayOfMedicamentoDTO" />
<element name="codigoRetorno" nillable="true" type="xsd:string" />
<element name="mensagemRetorno" nillable="true" type="xsd:string" />
<element name="nuAutorizacao" nillable="true" type="xsd:string" />
<element name="statusRecebimento" nillable="true" type="xsd:string" />
</sequence>
</complexType>
- <complexType name="PesquisaDTO">
- <sequence>
<element name="dataFim" nillable="true" type="xsd:dateTime" />
<element name="dataInicio" nillable="true" type="xsd:dateTime" />
<element name="nuCnpj" nillable="true" type="xsd:string" />
<element name="nuCnpjMatriz" nillable="true" type="xsd:string" />
<element name="numeroPagina" type="xsd:int" />
<element name="statusTransacao" nillable="true" type="xsd:string" />
</sequence>
</complexType>
- <complexType name="ItemPesquisaDTO">
- <sequence>
<element name="arrMedicamentoDTO" nillable="true" type="impl:ArrayOfMedicamentoDTO" />
<element name="coSolicitacaoFarmacia" nillable="true" type="xsd:string" />
<element name="dtAutorizacao" nillable="true" type="xsd:dateTime" />
<element name="dtRecebimento" nillable="true" type="xsd:dateTime" />
<element name="dtSolicitacao" nillable="true" type="xsd:dateTime" />
<element name="nuAutorizacao" nillable="true" type="xsd:string" />
<element name="nuCpf" nillable="true" type="xsd:string" />
<element name="nuCrm" nillable="true" type="xsd:string" />
<element name="nuCupomFiscal" nillable="true" type="xsd:string" />
<element name="sgUfCrm" nillable="true" type="xsd:string" />
</sequence>
</complexType>
- <complexType name="ArrayOfItemPesquisaDTO">
- <complexContent>
- <restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType" wsdl:arrayType="impl:ItemPesquisaDTO[]" />
</restriction>
</complexContent>
</complexType>
- <complexType name="RetornoPesquisaDTO">
- <sequence>
<element name="arrItemPesquisaDTO" nillable="true" type="impl:ArrayOfItemPesquisaDTO" />
<element name="codigoRetorno" nillable="true" type="xsd:string" />
<element name="dataFim" nillable="true" type="xsd:dateTime" />
<element name="dataInicio" nillable="true" type="xsd:dateTime" />
<element name="mensagemRetorno" nillable="true" type="xsd:string" />
<element name="nuCnpj" nillable="true" type="xsd:string" />
<element name="nuCnpjMatriz" nillable="true" type="xsd:string" />
<element name="numeroPagina" type="xsd:int" />
<element name="quantidadePaginas" type="xsd:int" />
<element name="statusTransacao" nillable="true" type="xsd:string" />
<element name="totalTransacoes" type="xsd:int" />
<element name="totalTransacoesPagina" type="xsd:int" />
</sequence>
</complexType>
- <complexType name="EstornoDTO">
- <sequence>
<element name="arrMedicamentoDTO" nillable="true" type="impl:ArrayOfMedicamentoDTO" />
<element name="nuAutorizacao" nillable="true" type="xsd:string" />
<element name="nuCnpj" nillable="true" type="xsd:string" />
</sequence>
</complexType>
- <complexType name="ConfirmacaoEstornoDTO">
- <sequence>
<element name="arrMedicamentoDTO" nillable="true" type="impl:ArrayOfMedicamentoDTO" />
<element name="descMensagemErro" nillable="true" type="xsd:string" />
<element name="inSituacaoEstorno" nillable="true" type="xsd:string" />
<element name="nuEstorno" nillable="true" type="xsd:string" />
</sequence>
</complexType>
</schema>
</wsdl:types>
- <wsdl:message name="executarEstornoRequest">
<wsdl:part name="in0" type="impl:EstornoDTO" />
<wsdl:part name="in1" type="impl:UsuarioFarmaciaDTO" />
</wsdl:message>
- <wsdl:message name="confirmarRecebimentoResponse">
<wsdl:part name="confirmarRecebimentoReturn" type="impl:ConfirmacaoRecebimentoDTO" />
</wsdl:message>
- <wsdl:message name="executarSolicitacaoRequest">
<wsdl:part name="in0" type="impl:SolicitacaoDTO" />
<wsdl:part name="in1" type="impl:UsuarioFarmaciaDTO" />
</wsdl:message>
- <wsdl:message name="pesquisarAutorizacoesResponse">
<wsdl:part name="pesquisarAutorizacoesReturn" type="impl:RetornoPesquisaDTO" />
</wsdl:message>
- <wsdl:message name="executarSolicitacaoResponse">
<wsdl:part name="executarSolicitacaoReturn" type="impl:AutorizacaoDTO" />
</wsdl:message>
- <wsdl:message name="confirmarRecebimentoRequest">
<wsdl:part name="in0" type="impl:RecebimentoDTO" />
<wsdl:part name="in1" type="impl:UsuarioFarmaciaDTO" />
</wsdl:message>
- <wsdl:message name="pesquisarAutorizacoesRequest">
<wsdl:part name="in0" type="impl:PesquisaDTO" />
<wsdl:part name="in1" type="impl:UsuarioFarmaciaDTO" />
</wsdl:message>
- <wsdl:message name="confirmarAutorizacaoResponse">
<wsdl:part name="confirmarAutorizacaoReturn" type="impl:ConfirmacaoAutorizacaoDTO" />
</wsdl:message>
- <wsdl:message name="confirmarAutorizacaoRequest">
<wsdl:part name="in0" type="impl:ConfirmacaoDTO" />
<wsdl:part name="in1" type="impl:UsuarioFarmaciaDTO" />
</wsdl:message>
- <wsdl:message name="executarEstornoResponse">
<wsdl:part name="executarEstornoReturn" type="impl:ConfirmacaoEstornoDTO" />
</wsdl:message>
- <wsdl:portType name="ServicoSolicitacaoWS">
- <wsdl:operation name="executarSolicitacao" parameterOrder="in0 in1">
<wsdl:input message="impl:executarSolicitacaoRequest" name="executarSolicitacaoRequest" />
<wsdl:output message="impl:executarSolicitacaoResponse" name="executarSolicitacaoResponse" />
</wsdl:operation>
- <wsdl:operation name="confirmarAutorizacao" parameterOrder="in0 in1">
<wsdl:input message="impl:confirmarAutorizacaoRequest" name="confirmarAutorizacaoRequest" />
<wsdl:output message="impl:confirmarAutorizacaoResponse" name="confirmarAutorizacaoResponse" />
</wsdl:operation>
- <wsdl:operation name="confirmarRecebimento" parameterOrder="in0 in1">
<wsdl:input message="impl:confirmarRecebimentoRequest" name="confirmarRecebimentoRequest" />
<wsdl:output message="impl:confirmarRecebimentoResponse" name="confirmarRecebimentoResponse" />
</wsdl:operation>
- <wsdl:operation name="pesquisarAutorizacoes" parameterOrder="in0 in1">
<wsdl:input message="impl:pesquisarAutorizacoesRequest" name="pesquisarAutorizacoesRequest" />
<wsdl:output message="impl:pesquisarAutorizacoesResponse" name="pesquisarAutorizacoesResponse" />
</wsdl:operation>
- <wsdl:operation name="executarEstorno" parameterOrder="in0 in1">
<wsdl:input message="impl:executarEstornoRequest" name="executarEstornoRequest" />
<wsdl:output message="impl:executarEstornoResponse" name="executarEstornoResponse" />
</wsdl:operation>
</wsdl:portType>
- <wsdl:binding name="ServicoSolicitacaoWSSoapBinding" type="impl:ServicoSolicitacaoWS">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
- <wsdl:operation name="executarSolicitacao">
<wsdlsoap:operation soapAction="" />
- <wsdl:input name="executarSolicitacaoRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://service.datasus.org/" use="encoded" />
</wsdl:input>
- <wsdl:output name="executarSolicitacaoResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://service.datasus.org/" use="encoded" />
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="confirmarAutorizacao">
<wsdlsoap:operation soapAction="" />
- <wsdl:input name="confirmarAutorizacaoRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://service.datasus.org/" use="encoded" />
</wsdl:input>
- <wsdl:output name="confirmarAutorizacaoResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://service.datasus.org/" use="encoded" />
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="confirmarRecebimento">
<wsdlsoap:operation soapAction="" />
- <wsdl:input name="confirmarRecebimentoRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://service.datasus.org/" use="encoded" />
</wsdl:input>
- <wsdl:output name="confirmarRecebimentoResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://service.datasus.org/" use="encoded" />
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="pesquisarAutorizacoes">
<wsdlsoap:operation soapAction="" />
- <wsdl:input name="pesquisarAutorizacoesRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://service.datasus.org/" use="encoded" />
</wsdl:input>
- <wsdl:output name="pesquisarAutorizacoesResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://service.datasus.org/" use="encoded" />
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="executarEstorno">
<wsdlsoap:operation soapAction="" />
- <wsdl:input name="executarEstornoRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://service.datasus.org/" use="encoded" />
</wsdl:input>
- <wsdl:output name="executarEstornoResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://service.datasus.org/" use="encoded" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
- <wsdl:service name="ServicoSolicitacaoWSService">
- <wsdl:port binding="impl:ServicoSolicitacaoWSSoapBinding" name="ServicoSolicitacaoWS">
<wsdlsoap:address location="https://200.214.130.41:9443/farmaciahomologa/services/ServicoSolicitacaoWS" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

Nunca mexi com esse tal de XML.
Alguém poderia dar-me uma luz?

Mário
Avatar de usuário

Mário Isa
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 902
Data de registro: 07 Jul 2004 13:54
Cidade/Estado: Ilha Solteira-sp
Curtiu: 5 vezes
Mens.Curtidas: 8 vezes

Mensagempor rochinha » 04 Dez 2006 18:31

Amiguinho

XML Nada mais é do que uma estrutura de dados em formato hierarquico e que geralmente não tem fim definido, ou seja:

<AVO>
     <PAI>
           <FILHO>
                 <NETO>
                     ...
                 </NETO>
           </FILHO>
     </PAI>
</AVO>


Um arquivo de dados poderia ser parecido com isto:
<CAMPO>
    <DADO>
        <...>
    </DADO>
</CAMPO>


O que voce precisaria é identar o código recebido e identificar cada nó desta hierarquia e pegar os dados do campo que necessitar.

Neste exemplo que encontrei na NET ele usa Fivewin for Harbour, mas podera ser usado com o Harbour puro, pois Fivewin foi usado apenas para apresentação do resultado.

#include "fivewin.ch"
#include "adoxml.ch"

static xDLL,oGet,oSay
Function Main()
   local oDlg, oFont
   local cCEP1, cCEP2, cPESO, cTOTAL
   DEFINE FONT oFont NAME "ARIAL" SIZE 00,-12 BOLD
   SET _3DLOOK ON
   DEFINE DIALOG oDlg RESOURCE "Sedex" TITLE "Correios - Sedex"
          REDEFINE GET oGet101 VAR cCEP1  PICTURE "99999-999" ID 101 OF oDlg
          REDEFINE GET oGet102 VAR cCEP2  PICTURE "99999-999" ID 102 OF oDlg

          REDEFINE GET oGet103 VAR cPESO  PICTURE "999999999"ID 103 OF oDlg
          REDEFINE GET oGet104 VAR cTOTAL PICTURE "@E 99,999.99"ID 104 OF oDlg
          REDEFINE BUTTON ID 105 OF oDlg ACTION Consulta(cCEP1,cCEP2,cPESO,oGet104,oSay106)

          REDEFINE SAY oSay106 MEMO ID 106 OF oDlg COLOR nRGB(255,0,0),getsyscolor(15)
   ACTIVATE DIALOG oDlg CENTERED
   return nil

Function Consulta(cCepOrigem,cCepDestino,cPeso,oTotal,oSay)
   local oRs, ws
   ws := TdWebService():new()
   oSay:SetText( "Aguarde. consulta base de dados" )
   cXMLSedex := ws:OpenWS( "http://www.correios.com.br/encomendas/precos/calculo.cfm?" +;
                      "&cepOrigem="+cCepOrigem+;
                      "&cepDestino="+cCepDestino+;
                      "&peso="+cPeso+;
                      "&resposta=xml" )
   ws:end()

   oSay:SetText( "Aguarde. salvando o resultado" )
   cXMLSedex := StrTran( cXMLSedex, "</calculo_pr", "</calculo_precos>" )
   MemoWrit( "sedex.xml", cXMLSedex )

   // Uso minha biblioteca para abrir o XML e apresentar o resultado
   XML USE sedex.xml
   cTotal := oRs:Fields( "preco_postal" ):Value
   oTotal:Refresh()
   XML CLOSE

   oSay:SetText( cXMLSedex )
   return nil

/*
*
* Classe WebService
*
*/
#include "dll.ch"

//static xdll
CLASS TdWebService
     DATA hOpen
     DATA sbuffer HIDDEN
     DATA xDLL HIDDEN

     METHOD New(buffersize) CONSTRUCTOR

     METHOD OpenWS(url)

     METHOD End()
ENDCLASS
*****************************
METHOD New(conexion,buffersize) CLASS TdWebService
DEFAULT buffersize:=3200
   ::sbuffer:=buffersize
   xDll:=LoadLib32("wininet.dll")
   ::hOpen = InternetOpen("TdWebService", 1,,, 0)
RETURN Self
*****************************
METHOD OpenWS(url) CLASS TdWebService
local hFile,ret,xml
   hFile = InternetOpenUrl(::hOpen, url,"",0,,0)
   xml:=space(::sbuffer)
   InternetReadFile(hFile, @xml, ::sbuffer, @Ret)
return subst(alltrim(xml),1,len(alltrim(xml))-5)
*****************************
METHOD End() CLASS TdWebService
   FreeLib32(xDll)
return nil
*****************************

DLL32 FUNCTION InternetOpen( cApp as LPSTR, n1 AS DWORD, n2 AS LPSTR, n3 AS LPSTR,;
                             n4 AS DWORD ) AS LONG PASCAL ;
                             FROM "InternetOpenA" LIB xdll
Dll32 Function InternetReadFile(hFile As 7, @sBuffer As 8, lNumBytesToRead As 7, @lNumberOfBytesRead As 7) As 7 PASCAL Lib xdll
Dll32 Function InternetOpenUrl(hInternetSession As 7, lpszUrl As 8, lpszHeaders As 8, dwHeadersLength As 7, dwFlags As 7, dwContext As 7) As 7 FROM "InternetOpenUrlA" PASCAL Lib xdll
DLL32 FUNCTION InternetCloseHandle( hSession AS LONG ) AS BOOL PASCAL LIB xdll


Analise e voce verá que não será dificil encontrar o resultado que voce quer.

Com este recurso é possivel até trazer de alguns sites o dolar do dia para dentro de seu aplicativo, bastando ter internet, voce pode também inserir dados em um arquivo em um site e ai por diante.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4548
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 808 vezes
Mens.Curtidas: 246 vezes

Mensagempor gvc » 05 Dez 2006 10:20

Vamos usar o exemplo do mestre Rochinha.

<Cambio>
<Cotação>
<data>01/01/2006</data>
<moeda>dolar, 3.567</moeda>
<moeda>euro, 4.642</moeda>
<moeda>libra, 2.321</moeda>
<Cotação>
<data>03/01/2006</data>
<moeda>dolar, 3.573</moeda>
<moeda>euro, 4.653</moeda>
<moeda>libra, 2.334</moeda>
</Contação>
</Cambio>

Que poderia ser montado tb assim:

<data>03/01/2006
<moeda>dolar
<valor>3.573</valor>
</moeda>
<moeda>euro
<valor>4.653</valor>
</moeda>
<moeda>libra
<valor>2.334</valor>
</moeda>
</data>
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar de usuário

gvc
Colaborador

Colaborador
 
Mensagens: 1269
Data de registro: 23 Ago 2005 10:57
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Mensagempor rochinha » 05 Dez 2006 11:08

Amiguinho

A partir dos exemplos voce precisa apenas criar uma função para pegar os dados dos campos que quizer, exemplo:

cVar1 :=  memoread( "Arquivo.xml" )
cVar2 := FunçãoQuePegaDadosXML( "valor", cVar1 )
...
FunçãoQuePegaDadosXML( PegarDado, OndePegarDado )
      InicioDoDado := "<"+PegarDado+">"
      FinalDoDado := "</"+PegarDado+">"
      return Substr( PegarDado, ;
                At(InicioDoDado,OndePegarDado)+len(InicioDoDado)+1, ;
                At(FinalDoDado,OndePegarDado)-1)


No exemplo acima(que não testei) passo a idéia de que voce passará para a função o nome do nó que voce deseja obter a informação e será montada a pesquisa que trará o resultado.

Veja que o exemplo é basico para que vc entenda o que pode ser melhorado e aprofundado.

Para exemplificar melhor veja a rotina que criei para ler os .OFX( arquivos de extrato Unibanco ) para meus sistemas:

Arquivo .OFX em formato .XML:
OFXHEADER:100
DATA:OFXSGML
VERSION:102
SECURITY:NONE
ENCODING:USASCII
CHARSET:1252
COMPRESSION:NONE
OLDFILEUID:NONE
NEWFILEUID:NONE

<OFX>
  <SIGNONMSGSRSV1>
    <SONRS>
      <STATUS>
        <CODE>0
        <SEVERITY>INFO
      </STATUS>
      <DTSERVER>20040116143610
      <LANGUAGE>POR
    </SONRS>
  </SIGNONMSGSRSV1>
  <BANKMSGSRSV1>
    <STMTTRNRS>
      <TRNUID>1001
      <STATUS>
        <CODE>0
        <SEVERITY>INFO
      </STATUS>
      <STMTRS>
        <CURDEF>BRL
        <BANKACCTFROM>
          <BANKID>0409
          <ACCTID>01372233377
          <ACCTTYPE>CHECKING
        </BANKACCTFROM>
        <BANKTRANLIST>
          <DTSTART>20040102
          <DTEND>20040116
          <STMTTRN>
            <TRNTYPE>DEBIT
            <DTPOSTED>20040102080000
            <TRNAMT>-1.22
            <FITID>7970123
            <CHECKNUM>7970123
            <MEMO>CPMF
          </STMTTRN>
        </BANKTRANLIST>
        <LEDGERBAL>
          <BALAMT>363.89
          <DTASOF>20040102
        </LEDGERBAL>
      </STMTRS>
    </STMTTRNRS>
  </BANKMSGSRSV1>
</OFX>


Codigo de leitura e interpretação:
PARA ARQ_PRN
SET EXCLUSIVE ON
SET DATE BRIT
ARQ_PRN1 := ARQ_PRN + ".OFX"
DBCREATE( "NFOFX2", { { "LI_NHA"  , "C",255, 0 } } )
//IF .NOT. FILE( "NFOFX3.DBF" )
DBCREATE( "NFOFX3", { { "IDBANCO"   , "C",20, 0 } , ;
                      { "IDCONTA"   , "C",20, 0 } , ;
                      { "AGENCIA"   , "C", 6, 0 } , ;
                      { "DATA"      , "D", 8, 0 } , ;
                      { "HISTORICO" , "C",45, 0 } , ;
                      { "DOCUMENTO" , "C",10, 0 } , ;
                      { "VALOR"     , "N",14, 2 } , ;
                      { "CREDITO"   , "N",14, 2 } , ;
                      { "DEBITO"    , "N",14, 2 } , ;
                      { "TIPO"      , "C", 1, 0 } , ;
                      { "CONCILIADO", "D", 8, 0 } , ;
                      { "FECHAMENTO", "L", 1, 0 } } )
//ENDIF
CLOSE DATABASES
USE NFOFX3 NEW
USE NFOFX2 NEW
APPEND FROM &ARQ_PRN1 SDF
GO TOP
M->BANKID   := ''
M->ACCTID   := ''
M->TRNTYPE  := ''
M->DTPOSTED := ''
M->TRNAMT   := ''
M->FITID    := ''
M->CHECKNUM := ''
M->MEMORAND := ''
M->CABECA   := .F.
DO WHILE .NOT. EOF()
   IF '<BANKID>' $ LI_NHA
      M->BANKID := SUBSTR(LI_NHA,9,05)
   ENDIF
   IF '<ACCTID>' $ LI_NHA
      M->ACCTID := SUBSTR(LI_NHA,9,15)
   ENDIF
   IF '<TRNTYPE>' $ LI_NHA
      M->TRNTYPE := SUBSTR(LI_NHA,10,40)
   ENDIF
   IF '<DTPOSTED>' $ LI_NHA
      M->DTPOSTED := CTOD(SUBSTR(LI_NHA,17,2)+'/'+;
                          SUBSTR(LI_NHA,15,2)+'/'+;
                          SUBSTR(LI_NHA,11,4))
   ENDIF
   IF '<TRNAMT>' $ LI_NHA
      M->TRNAMT := VAL(SUBSTR(LI_NHA,9,15))
   ENDIF
   IF '<FITID>' $ LI_NHA
      M->FITID := SUBSTR(LI_NHA,8,15)
   ENDIF
   IF '<CHECKNUM>' $ LI_NHA
      M->CHECKNUM := SUBSTR(LI_NHA,11,15)
   ENDIF
   IF '<MEMO>' $ LI_NHA
      M->MEMORAND := SUBSTR(LI_NHA,7,40)
   ENDIF
   IF '<STMTTRN>' $ LI_NHA
      SELE NFOFX3
      APPEND BLANK
      SELE NFOFX2
   ENDIF
   IF '</STMTTRN>' $ LI_NHA
      SELE NFOFX3
      REPLACE IDBANCO    WITH M->BANKID
      REPLACE IDCONTA    WITH SUBSTR(M->ACCTID,5,9)
      REPLACE AGENCIA    WITH SUBSTR(M->ACCTID,1,4)
      REPLACE DATA       WITH M->DTPOSTED
      REPLACE HISTORICO  WITH STRTRAN(M->MEMORAND,'*','')
      REPLACE DOCUMENTO  WITH M->CHECKNUM
      REPLACE VALOR        WITH M->TRNAMT
      REPLACE CREDITO     WITH IIF(M->TRNTYPE='C',M->TRNAMT,0)
      REPLACE DEBITO        WITH IIF(M->TRNTYPE='D',M->TRNAMT,0)
      REPLACE TIPO             WITH M->TRNTYPE
      REPLACE CONCILIADO WITH CTOD('  /  /  ')
      REPLACE FECHAMENTO WITH .F.
      SELE NFOFX2
   ENDIF
   SKIP
ENDDO


É correr pro abraço
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4548
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 808 vezes
Mens.Curtidas: 246 vezes




Retornar para CA-Clipper

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 2 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro