Criar um arquivo XML

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Paulao
Usuário Nível 3
Usuário Nível 3
Mensagens: 186
Registrado em: 09 Jul 2004 11:03
Localização: Franca
Contato:

Criar um arquivo XML

Mensagem por Paulao »

Um cliente meu me pediu pra eu gerar um arquivo XML com dados do meu sistema para se comunicar com o sistema de uma rede de lojas, eu criei a rotina abaixo

Código: Selecionar todos

*_______________________________________________________________________________   
Func gera_xml(oModelo)
Local oMod := oModelo
Local aData := substr(dtoc(date()),7,4)+"-"+substr(dtoc(date()),4,2)+"-"+substr(dtoc(date()),1,2)
local1:=chr(13)+chr(10)
local2:=0
Local3 := alltrim(oMod)+".XML"

dbselectarea('fitnomad')
ordsetfocus('refe_fit')
dbseek(oMod)
if eof()
    msgstop("Produto não encontrado","Atenção")
    return(nil)
else
    dbselectarea('granomad')
    ordsetfocus('desc_gra')
    dbseek(fitnomad->grad_fit)
    if eof()
        msgstop("Grade não encontrada","Atenção")
    endi
endi


nhandle:=fCreate(Local3,Local2)


fwrite(nhandle,;
'<?xml version="1.0"?>'+Local1)

fwrite(nhandle,;
'<catalogo>'+Local1)

fwrite(nhandle,;
'    <ident>'+Local1)

fwrite(nhandle,;
'       <versao>1.0</versao>'+Local1)

fwrite(nhandle,;
'       <data>'+aData+'</data>'+Local1)

fwrite(nhandle,;
'    </ident>'+Local1)

fwrite(nhandle,;
'    <gerador>'+Local1)

fwrite(nhandle,;
'        <razao>'+alltrim(connomad->nome_con)+'</razao>'+Local1)

fwrite(nhandle,;
'        <cnpj>'+alltrim(connomad->cnpj_con)+'</cnpj>'+Local1)

fwrite(nhandle,;
'    </gerador>'+Local1)

fwrite(nhandle,;
'    <produtos>'+Local1)

fwrite(nhandle,;
'        <produto>'+Local1)

fwrite(nhandle,;
'            <prod>'+alltrim(fitnomad->cpro_fit)+'</cod>'+Local1)

fwrite(nhandle,;
'            <pcategoria>'+alltrim(fitnomad->desc_fit)+'</pcategoria>'+Local1)

fwrite(nhandle,;
'            <punid>PR</pcategoria>'+Local1)

fwrite(nhandle,;
'            <grade>'+Local1)

for a = 1 to 20
    var_1="granomad->gr"+alltrim(str(a))+"_gra"
    if &var_1 <> spac(5)

        fwrite(nhandle,;
        '                <tm tid="'+alltrim(str(a))+'">'+alltrim(&var_1)+'</tm>'+Local1)

    endi
next

fwrite(nhandle,;
'            </grade>'+Local1)


fwrite(nhandle,;
'            <materiais>'+Local1)


fwrite(nhandle,;
'                <material>'+Local1)

fwrite(nhandle,;
'                <fmatcod>'+alltrim(fitnomad->codm_fit)+'</fmatcod>'+Local1)

fwrite(nhandle,;
'                <cores>'+Local1)


fwrite(nhandle,;
'                    <cor>'+Local1)

fwrite(nhandle,;
'                        <fcrcod>'+alltrim(fitnomad->codc_fit)+'</fcrcod>'+Local1)


fwrite(nhandle,;
'                        <eans>'+Local1)

for a = 1 to 20

    var_2 = 'fitnomad->cba'+alltrim(str(a))+'_fit'

    if &var_2 <> spac(13)

fwrite(nhandle,;
'                        <ean tid="'+alltrim(str(a))+'">'+alltrim(&var_2)+'</ean>'+Local1)
    endi

next
fwrite(nhandle,;
'                        </eans>'+Local1)

fwrite(nhandle,;
'                    </cor>'+Local1)

fwrite(nhandle,;
'                </cores>'+Local1)

fwrite(nhandle,;
'                </material>'+Local1)

fwrite(nhandle,;
'            </materiais>'+Local1)


fwrite(nhandle,;
'        </produto>'+Local1)

fwrite(nhandle,;
'    </produtos>'+Local1)

fwrite(nhandle,;
'</catalogo>'+Local1)

fclose(nhandle)



return(nil)

Que gera o arquivo abaixo

Código: Selecionar todos

<?xml version="1.0"?>
<catalogo>
    <ident>
       <versao>1.0</versao>
       <data>2018-01-09</data>
    </ident>
    <gerador>
        <razao>DAVID DA SILVA ADAO CALÇADOS ME</razao>
        <cnpj>08595135000159</cnpj>
    </gerador>
    <produtos>
        <produto>
            <prod>1000 CAT</cod>
            <pcategoria>BOTAS DE MATERIAL RECICLADO</pcategoria>
            <punid>PR</pcategoria>
            <grade>
                <tm tid="1">33</tm>
                <tm tid="2">34</tm>
                <tm tid="3">35</tm>
                <tm tid="4">36</tm>
                <tm tid="5">37</tm>
                <tm tid="6">38</tm>
                <tm tid="7">39</tm>
                <tm tid="8">40</tm>
                <tm tid="9">41</tm>
                <tm tid="10">42</tm>
                <tm tid="11">43</tm>
                <tm tid="12">44</tm>
            </grade>
            <materiais>
                <material>
                <fmatcod>DBR</fmatcod>
                <cores>
                    <cor>
                        <fcrcod>AOC</fcrcod>
                        <eans>
                        <ean tid="1">859513500701</ean>
                        <ean tid="2">859513500718</ean>
                        <ean tid="3">859513500725</ean>
                        <ean tid="4">859513500732</ean>
                        <ean tid="5">859513500749</ean>
                        <ean tid="6">859513500756</ean>
                        <ean tid="7">859513500763</ean>
                        <ean tid="8">859513500770</ean>
                        <ean tid="9">859513500787</ean>
                        <ean tid="10">859513500794</ean>
                        <ean tid="11">859513500800</ean>
                        <ean tid="12">859513500817</ean>
                        </eans>
                    </cor>
                </cores>
                </material>
            </materiais>
        </produto>
    </produtos>
</catalogo>
Salvei o arquivo como .XML

Fazendo da forma que fiz, Isto é um arquivo XML?
MSDN
Usuário Nível 4
Usuário Nível 4
Mensagens: 741
Registrado em: 28 Nov 2003 15:55
Localização: CWB
Contato:

Criar um arquivo XML

Mensagem por MSDN »

Olá,

Link falando o básico sobre XML :
https://www.tecmundo.com.br/programacao ... e-xml-.htm

O que vai definir se o arquivo é um XML, além da própria extensão associada ao nome do arquivo, é o seu formato interno, formado por TAGs (grupos de informações que abrem e fecham), e o que vai dizer se ele é válido, é quem receberá esse arquivo para ler e obter dados, se ele seguir exatamente as regras pré-definidas e/ou possíveis para sua criação, tudo OK.
Nos documentos fiscais exigidos pelo governo (NF-e, NFC-e, MDF-e, etc), vc pode pesquisar que sempre existe um arquivo chamado "schema", que seria o validador de um XML, se o XML entregue ao governo estiver dentro das regras, é validado.
No seu caso, que gera informação para outro sistema, basta saber o layout exigido/aceito, e se procurar aqui no Fórum, achará o link no GIT para baixar a Sefazclass, desenvolvida pelo Quintas, que já tem rotinas para tratar XML, ajuda muito.
Paulao
Usuário Nível 3
Usuário Nível 3
Mensagens: 186
Registrado em: 09 Jul 2004 11:03
Localização: Franca
Contato:

Criar um arquivo XML

Mensagem por Paulao »

Muito obrigado
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Criar um arquivo XML

Mensagem por JoséQuintas »

O XML é tudo numa linha só, não dá pra perceber se fez isso.

Mas esta parte está errada, porque começa com um nome e termina com outro.
O primeiro e último blocos desta parte:

Código: Selecionar todos

<prod>1000 CAT</cod>
<pcategoria>BOTAS DE MATERIAL RECICLADO</pcategoria>
<punid>PR</pcategoria>
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder