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: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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