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/farmaciahom ... icitacaoWS" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Nunca mexi com esse tal de XML.
Alguém poderia dar-me uma luz?
Mário
XML - Dúvidas
Moderador: Moderadores
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
XML Nada mais é do que uma estrutura de dados em formato hierarquico e que geralmente não tem fim definido, ou seja:
Um arquivo de dados poderia ser parecido com isto:
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.
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.
XML Nada mais é do que uma estrutura de dados em formato hierarquico e que geralmente não tem fim definido, ou seja:
Código: Selecionar todos
<AVO>
<PAI>
<FILHO>
<NETO>
...
</NETO>
</FILHO>
</PAI>
</AVO>
Código: Selecionar todos
<CAMPO>
<DADO>
<...>
</DADO>
</CAMPO>
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.
Código: Selecionar todos
#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
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 [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
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>
<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}
{POG - Programação Orientada a Gambiarra}
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
A partir dos exemplos voce precisa apenas criar uma função para pegar os dados dos campos que quizer, exemplo:
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:
Codigo de leitura e interpretação:
É correr pro abraço
A partir dos exemplos voce precisa apenas criar uma função para pegar os dados dos campos que quizer, exemplo:
Código: Selecionar todos
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)
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:
Código: Selecionar todos
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>
Código: Selecionar todos
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
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.

