Página 1 de 1

Criar um arquivo XML

Enviado: 09 Jan 2018 16:33
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?

Criar um arquivo XML

Enviado: 09 Jan 2018 17:07
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.

Criar um arquivo XML

Enviado: 10 Jan 2018 20:23
por Paulao
Muito obrigado

Criar um arquivo XML

Enviado: 10 Jan 2018 21:38
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>