Jump to content
Fivewin Brasil

XML pode se tornar realidade com a minha bibliotec


rochinha

Recommended Posts

Amiguinhos

Sào noites sem dormir mas tinha que produzir esta biblioteca para que pudesse colocar em meus sistemas um meio de abrir, manipular e salvar estes arquivos de forma rápida e indolor.

Sei que existe por ai muitas RDDs ferradas mas a minha biblioteca não tem o intuito de se tornar mais uma e nem mesmo chegar a arranhar o nicho delas.

O que pretendia era quase que um trabalho academico, o de construir uma ponte para estes tipos de arquivos com linguagem conhecida e aspecto profissional.

Ela possui as funções básicas para manipulação de arquivos XML que comportem em seu esqueleto o SCHEMA, estrutura da tabela de controle.

Os comandos básicos podem ser visualizados no arquivo XML.CH, algo como:


XML APPEND BLANK

XML EDIT

XML COMMIT

XML SKIP

XML DELETE

XML REPLACE

XML GOTOP

XML GOBOTTOM

XML SET FILTER TO

XML SAVE

XML EXECUTE

XML LOCATE

XML CLOSE

XML USE

id=code>id=code>

E suas respectivas funções


XMLAPPEND()

XMLEDIT()

XMLCOMMIT()

XMLSKIP()

XMLDELETE()

XMLREPLACE()

XMLGOTOP()

XMLGOBOTTOM()

XMLSETFILTER()

XMLSAVE()

XMLEXECUTE()

XMLLocate()

XMLUSE()

id=code>id=code>

À biblioteca foi dimencionada para trabalhar assim com o proprio XML com um arquivo por vez, sem area ou selects.

Por isto ela é simples. portanto como ...em cavalo dado não se olha os dentes... façam bom uso e cada alteração que fizer estarei disponibilizando.

Podem baixar a biblioteca juntmente com um exemplo prático em:

http://www.shoppmarketing.com/forum/xmllib.asp

Lembrando que estou utilizando para isto o Harbour 45

Editado por - rochinha on 21/11/2006 02:52:55

Link to comment
Share on other sites

Amiguinhos

Sào noites sem dormir mas tinha que produzir esta biblioteca para que pudesse colocar em meus sistemas um meio de abrir, manipular e salvar estes arquivos de forma rápida e indolor.

Sei que existe por ai muitas RDDs ferradas mas a minha biblioteca não tem o intuito de se tornar mais uma e nem mesmo chegar a arranhar o nicho delas.

O que pretendia era quase que um trabalho academico, o de construir uma ponte para estes tipos de arquivos com linguagem conhecida e aspecto profissional.

Ela possui as funções básicas para manipulação de arquivos XML que comportem em seu esqueleto o SCHEMA, estrutura da tabela de controle.

Os comandos básicos podem ser visualizados no arquivo XML.CH, algo como:


XML APPEND BLANK

XML EDIT

XML COMMIT

XML SKIP

XML DELETE

XML REPLACE

XML GOTOP

XML GOBOTTOM

XML SET FILTER TO

XML SAVE

XML EXECUTE

XML LOCATE

XML CLOSE

XML USE

id=code>id=code>

E suas respectivas funções


XMLAPPEND()

XMLEDIT()

XMLCOMMIT()

XMLSKIP()

XMLDELETE()

XMLREPLACE()

XMLGOTOP()

XMLGOBOTTOM()

XMLSETFILTER()

XMLSAVE()

XMLEXECUTE()

XMLLocate()

XMLUSE()

id=code>id=code>

À biblioteca foi dimencionada para trabalhar assim com o proprio XML com um arquivo por vez, sem area ou selects.

Por isto ela é simples. portanto como ...em cavalo dado não se olha os dentes... façam bom uso e cada alteração que fizer estarei disponibilizando.

Podem baixar a biblioteca juntmente com um exemplo prático em:

http://www.shoppmarketing.com/forum/xmllib.asp

Lembrando que estou utilizando para isto o Harbour 45

Editado por - rochinha on 21/11/2006 02:52:55

Link to comment
Share on other sites

Grande Rochinha, blz cara,

espero q vc nao se cadastrou aqui só p/ fazer este post, pois, espero q venha enrriquecer ainda mais nossa comunidade aqui, com seu conhecimento.

Pra quem nao sabe, este cara, segura praticamente sozinho o topico de Five no Forum do Toledo.

-----------------------------------------------

Nao manjo muito de XML, ou melhor, praticamente nada.

se eu perguntar besteira, pode xingar, hehehhe...

citação:À biblioteca foi dimencionada para trabalhar assim com o proprio XML com um arquivo por vez, sem area ou selects.
id=quote>id=quote>

Se eu entendi direito, aquelas manobras de trabalhar com varios arquivos ao mesmo tempo nao dá ?

Entao qual seria a vantagem de trabalhar com este tipo de arquivos ?

@braços Ale

**IV ENCONTRO DE PROGRAMADORES FIVEWIN **

"Imperdivel, já tô nessa"

Alessandro Seribeli Barreto

ale.seribeli@ig.com.br

aleseribeli@hotmail.com

Andradina - SP

FWh 2.4, xH80, xMate, Pelles

Link to comment
Share on other sites

Amiguinho

Existem tantos RDDs por ai que fica dificil aparecer com mais um e eu não quero somar e sim ampliar nosso leque de possibilidades de integração, pois como voces sabem o papo do momento é SOAP.

SOAP nada mais é que a integração de aplicações e ambientes com a troca de arquivos via XML exemplo disso as APIs do Google e dos Correios.

Com arquivos XML fica facil o transporte de dados de forma leve e compativel com muita coisa da Micro$oft e outros.

Os RDDs que encontramos são designados para grandes volumes de dados e portanto são uma solução profissional e minha biblioteca não tem pretensão de ser um RDD e sim uma ponte para a integração.

Na pratica voce pode receber os arquivos XML provenientes de bancos e visualizar os lançamentos de sua conta.

Voce pode enviar informações para um site e receber o resultado para sua aplicação e por ai vai.

Para montar um aplicativo simples acho que seja possivel pois bastaria integrar o trabalho com áreas mas ue me preocupei mais com o principal, abrir, gravar, excluir, encontrar e salvar.

Posteriormente estarei integrando opções como COPY TO e APPEND FROM, CREATE e etc.

O importante é que a semente foi plantada e agora devo cultiva-la.

Editado por - rochinha on 21/11/2006 11:09:26

Link to comment
Share on other sites

  • 3 weeks later...

Rochinha, saudações !

Estou precisando usar um WebService a partir do xHarbour/Fivewin e já dei uma adiantada nos meus conhecimentos de XML.

Porém estou tendo dificuldades em encontrar como usar o SOAP com o xHarbour...

Você poderia dar umas dicas e postar um exemplo em código de como trocar mensagens SOAP ?

Desde já agradeço.

Maurício Faria

Link to comment
Share on other sites

Amiguinhos

Obrigado pelo apoio a todos.

Bom, o XML é um padrão de arquivo multihierarquico o qual sua estrutura não tem um fim definido, pois podemos ter muitos nós aninhados dentro dos outros, mas para não confundir sempre usamos no maximo 2 ou 3.

No XML a seguir capturado via web-service em 5Win/Harbour voce podem ver uma pequena estrutura:


<?xml version="1.0" encoding="ISO-8859-1" ?>

1.0

40010

SEDEX

05171340

88330000

31

0

0

0

0

0

-4

Peso excedido

id=code>id=code>

Portanto o trabalho com nós do mesmo não é assim tão fácil de se manipular

Com o exemplo acima minha função XMLGet() cai como uma luva para obter dados do arquivo.

No codigo que segue apresento o .RC da DIALOGo principal de interface com o usuário:

Salve como SEDEX.RC


Sedex DIALOG 28, 62, 267, 175

STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU

CAPTION "DIALOG_1"

FONT 8, "MS Sans Serif"

{

EDITTEXT 101, 37, 17, 47, 12

EDITTEXT 102, 168, 17, 47, 12

EDITTEXT 103, 78, 50, 67, 12

PUSHBUTTON "Calcular Envio", 105, 149, 50, 107, 27

EDITTEXT 104, 78, 65, 67, 12

LTEXT "Nenhuma operação em curso.", 106, 10, 97, 247, 67

GROUPBOX "Origem", -1, 4, 5, 128, 32, BS_GROUPBOX

GROUPBOX "Calculo", -1, 4, 38, 259, 46, BS_GROUPBOX

GROUPBOX "Mensagem", -1, 4, 87, 259, 82, BS_GROUPBOX

LTEXT "CEP:", -1, 9, 18, 26, 8

LTEXT "Peso em Gramas:", -1, 10, 52, 60, 8

LTEXT "Total a Pagar R$:", -1, 11, 66, 60, 8

GROUPBOX "Destino", -1, 135, 5, 128, 32, BS_GROUPBOX

LTEXT "CEP:", -1, 140, 18, 26, 8

}

id=code>id=code>

O codigo a seguir é um web-service que tem por função passar parâmetros ao servidor de serviços dos Correios afim de trazer uma resposta dada por seus serviços on-line.

Imagine que o mesmo método poderá ser usado para enviar dados ao Seraza e SPC e trazer o resultado da pesquisa validando ou não o crédito de um cliente.

O código a seguir, feito em 5Win 2.7 e Harbour 45 pode ser adaptado a qualquer versão ou até a qualquer GUI que não 5Win e demonstra de forma clara com é feito este trabalho.

Salve como SEDEX.PRG


#include "fivewin.ch"

static xDLL,oGet,oSay

Function Main()

local oDlg, oFont

local cCEP1:=space(9), cCEP2:=space(9), cPESO:=0 , cTOTAL := 0

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="+alltrim(str(cPeso))+;

"&resposta=xml" )

ws:end()

oSay:SetText( "Aguarde. salvando o resultado" )

MemoWrit( "sedex.xml", cXMLSedex )

cXMLPreco := XMLGet( "preco_postal", cXMLSedex )

cXMLErros := XMLGet( "descricao" , cXMLSedex )

cTotal := transf( val( cXMLPreco ), "@E 99,999.99" )

oGet104:Refresh()

oGet104:SetText( cTotal )

oSay:SetText( iif( empty( cXMLErros ), "Operacao bem sucedida", cXMLErros ) )

return nil

Function XMLGet( XMLField, XMLFile )

XMLField := alltrim( XMLField )

XMLFieldINI := rat( "<"+XMLField+">", XMLFile ) + len( "<"+XMLField+">" )

XMLFieldEND := rat( ""+XMLField+">", XMLFile ) - XMLFieldINI

return substr( XMLFile, XMLFieldINI, XMLFieldEND )

#include "Websrvce.prg"

id=code>id=code>

Abaixo vemos a classe WebService que é a responsável por fazer a ponte entre nosso aplicativo e o ponto distante do mesmo.

Salve como WEBSRVCE.PRG


/*

*

* 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

id=code>id=code>

Tenho feito outros web-services para meu aplicativo e sei que mesmo ainda usando o xBase vejo que não existem mais segredos e nem barreiras que eu não consiga transpor, além do próprio Céu.

"E que Deus seja louvado!"

Link to comment
Share on other sites

com a sua biblioteca e o exemplo acima, me veio a ideia de fazer a pesquisa de Busca CEP, lá é:

http://www.correios.com.br/servicos/cep/cep_loc_log.cfm

agora abri o codigo fonte da pagina e nao sei o que pegar para montar o que vc fez.. tem que pegar os nome de campos que ele recebe no post..

isso ainda é novo para mim..mas colocar a busca cep on-line é muito util, e poderia até criar rotinas/relatorios do cadastro dos clientes que estão com CEP errado/duvidoso.

Ari

Link to comment
Share on other sites

Amiguinhos

Por partes

Analisando o codigo da pagina de CEPs dos correios o que deve ser passado pelo web-service para pesquisa sao basicamente os campos abaixo:

UF

Localidade

Tipo

Logradouro

Então o codigo ficaria parecido com isto:


cCEPResult := ws:OpenWS( "http://www.correios.com.br/servicos/cep/cep_loc_log.cfm?" +; "&UF="+cUF+; "&localidade="+clocalidade+; "&tipo="+ctipo+; "&logradouro="+clogradouro" )

id=code>id=code>

Só não sei o formato da resposta que deverá ser visualizada no conteudo da variavel cCEPResult.

citação:

Uma pergunta... os arquivos de notas fiscais eletronicas sao XML tbm correto? Entao poderei usar a tua classe para criar estes arquivos?


id=quote>id=quote>

O XML das e-NF poderá ser tratado com a classe XML existente no xHarbour 0.99.60 e 0.99.61. Minha biblioteca trata o XML de forma mais completa e complexa, ou seja, a estrutura do XML tratado por ela já vem dentro do mesmo XML de dados.

citação:

E para trabalhar com SOAP, Farmácia Popular por exemplo, daria para fazer com esta classe?


id=quote>id=quote>

Assim como as e-NF provavelmente este caso seja o mesmo, ou seja, o XML contém somente dados e o mesmo deverá ser analisado por uma rotina criada pelo próprio usuário tratando strings diretamente.

Nos dois caso minha biblioteca poderá armazenar os dados passados pelo usuário em verdadeiros bancos de dados XML não podendo portanto tratar de forma direta estes arquivos.

Resumindo voce poderá incluir, alterar, excluir, filtrar, pesquisar, indexar, arquivos XML como se fossem DBFs.

Inclusive a atualização esta disponivel em http://www.shoppmarketing.com/forum/hbadox.612.09.zip

Link to comment
Share on other sites

rodei o consulta sedex, funcionou legal. coloquei como passou no busca CEP, só que não retorna em XML ..sempre vem em HTML e tive que aumentar o buffer para ver a pagina toda..salvei em um arquivo..mas nao vem o resultado..

Pergunto como ficou sabendo que colocando XML na variavel resposta o arquivo seria criado em XML.. observei que na cep_loc_log.cfm tem um campo hidden 'mode' value='deploy'..tentei passar o 'xml' não dá certo.

Ari

Link to comment
Share on other sites

Amiguinho

O problema é que não sei onde gravei a string de pesquisa.

Talvez eu não tenha dado importancia pois o correios disponibiliza um pacote chamado DNE que possui os ceps do brasil inteiro em formato .TXT então acho que por isto não dei importancia a fazer um web-service relativo.

Mas vou continuar procurando e logo logo posto aqui.

Link to comment
Share on other sites

Olá Rochinha!

Veja o q achei a respeito do WEBService dos correios, parece q tem gente que conseguiu acessar sem problemas... neste link tem uma discussão a arespeito e o sujeito apresenta a solução... será q tem como implantar via sua classe?

http://thespoke.net/blogs/thiagocf/archive/2005/08/31/353202.aspx

Abraço!

Alexandre E.Luiz

Link to comment
Share on other sites

Olá,


id=code>id=code>

Ao passar este comando o retorno é o código fonte da página, e não um XML com os dados.

[]s,

Evandro G. de Paula

Curvelo - MG

evandro@skillnet.com.br (Escr. - na Cidade)

imortal@skillnet.com.br (Res. - na Roça)

FWH 2.6+PellesC+MyMake+xHarbour.org 0.99.5+SqlLib

Editado por - evandro on 16/12/2006 18:09:16

Link to comment
Share on other sites

  • 1 year later...

Ola Rocinha

Cara tentei baixar no link os dados da tua classe mas esta off... tem como postar novamente?

Alguem ja usou a classe do rocinha, estou vendo como funcionaria para e_NF

valeu amigos

Um Xharbraço.

Uso Fwh 2.5 (xharbour 0.99.3) e Xmate Para Compilar

Impactus Automação Comercial

jef2_timber@hotmail.com

(91)-32387012

Belem-PA

Link to comment
Share on other sites

Olá Rochinha.

Eu li o seu post, e achei muito interessando a sua lib.

Não estou conseguindo baixalo para testar, + de qualquer forma parabens, realmente parece estar bom.

De uns tempos para cá tenho tido muito problema com um xml que pego de retorno de uma pesquisa de cep.

Pois o xHarbour ignora alguns caracteres especiais. Eu estou usando uma ActiveX para ler o retorno da pagina.

Viaqui que alguns usao uma outra forma, vou dar uma pesquisada mais a fundo.

A minha duvida é se você teve algum problema semelhante de perder alguns caracteres especiasicomo o ã ou o Ç na leitura do arquivo.

Muito obrigado, abraços.

Coding 4Fun, 4Cash, 4Knowleage

Carlson A. Soares - SP - SP

email: soares_289@hotmail.com

FiveWin 7.05 - xHarbour 0.99.61 - SQLRDD

São Paulo - SP

Link to comment
Share on other sites

tb nao consegui baixar ... coloca no rapidshare ou dicas do fw

*****

xharbour 1.1.0 + gtwvw + dbfcdx

fw 8.01+borland resouce workshop e começando a mexer com txbrowse

fwppc (comprei ainda nao usei)

USANDO GTWVW + FW JUNTO ....

msn..: zazibr@hotmail.com

skype: zazibr

Daniel lopes Filho

Campo Grande/MS

Editado por - zazibr on 05/05/2008 14:14:32

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...