1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

Gravar aquivo.xml no banco

Discussão em 'Progress 4GL' iniciado por danielsufiatti, Setembro 29, 2010.

  1. danielsufiatti

    danielsufiatti Sem Pontuação

    Olá pessoal.
    Preciso de uma ajuda
    recebo xmls de fornecedores, e preciso gravar os mesmos no banco.
    nao sei se existe como gravar arquivo (fisico) no banco, ja vi algo parecido com imagens.
    entao tentei fazer o seguinte importar o XML, para uma variavel longchar
    mas eu nao consigo manipular a mesma,
    pois quando vou importar uso o INPUT/IMPORT UNFORMATED
    e ele me traz o XML em apenas uma linha, precisaria quebrar essas linhas quando ele encontrasse o texto "><"
    ou seja, abrir/fechar tag do XML, algém sabe como fazer isso ?

    att
    Daniel Luiz Sufiatti
  2. antenor

    antenor Membro Participativo

    Você pode usar o PUT para escerver lembrando que no xml vc deve usar "" para delimitar uam aspas simples que fica drntro da tag, para que brar linha é só usar o PUT com AT 1 no final. Veja se o código abaixo te ajuda:

    OUTPUT TO VALUE("c:\PF160075.mac").
    /*cabeçalho padrão*/
    PUT "<HAScript name=""macropf3"" description="""" timeout=""60000"" pausetime=""300"" promptall=""true"" blockinput=""false"" author=""dcont_s2adj3"" creationdate=""27/09/2010 16:18:51"" supressclearevents=""false"" usevars=""false"" ignorepauseforenhancedtn=""true"" delayifnotenhancedtn=""0"" ignorepausetimeforenhancedtn=""true"">" AT 1.
    PUT "<screen name=""Tela1"" entryscreen=""true"" exitscreen=""false"" transient=""false"">" AT 1.
    PUT "<description >" AT 1.
    PUT "<oia status=""NOTINHIBITED"" optional=""false"" invertmatch=""false"" />" AT 1.
    PUT "</description>" AT 1.
    PUT "<actions>" AT 1.
    PUT "<mouseclick row=""22"" col=""11"" />" AT 1.
    PUT "<input value=""&gt;pf[enter]"" row=""0"" col=""0"" movecursor=""true"" xlatehostkeys=""true"" encrypted=""false"" />" AT 1.
    PUT "</actions>" AT 1.
  3. kirchner

    kirchner Membro Participativo Moderador

    Daniel,

    Qual o motivo de você não conseguir importar? Só porque ficou tudo na mesma linha? Não faz sentido...
    Para o parser do XML espaço em branco não significa nada. Então mesmo que esteja tudo na mesma linha, se o XML é válido ele é válido e ponto.
  4. danielsufiatti

    danielsufiatti Sem Pontuação

    olá pessoal, obrigado pela ajuda,
    antenor, a variavel do tipo longchar, não aceita output/ Input, tentei esse que voce mandou, aparece o erro
    "Operações de INPUT/OUTPUT não são permitidas para variáveis do tipo RAW, ROWID, MEMPTR, BLOB, CLOB ou LONGCHAR."
    mas agora ja consegui,
    criei um campo xml na minha tabela, do tipo CLOB
    ai consigo repassar a ele a variavel longchar.
    para ler o xml, utilizei o COPY-LOB ex:
    COPY-LOB CADASTRO.CTE.XML TO FILE "C:\TESTE.xml".
    e ele faz certinho
    obrigado pela ajuda pessoal
  5. eder.luca2012

    eder.luca2012 Membro Participativo

    Pessoal estou precisando importar o conteúdo de um arquivo xml para uma variável seria esse o procedimento?
  6. lwazevedo

    lwazevedo Membro Ativo

    faça como código abaixo.
    pega o xml e transforma em uma longchar, depois cria o x-documento e manda para temp como o código ou
    direto bara a tabela do banco se preferir.

    def var Hdoc as handle.
    def var Hroot as handle.

    create x-document HDoc.
    Hdoc:load("LONGCHAR","c-file.xml",false).
    create x-noderef hroot.
    hDoc:get-document-element(hroot).

    procedure obtemnode.
    def input parameter vh as handle.
    def var hc as handle.
    def var loop as int.

    create x-noderef hc.

    do loop = 1 to vh:num-children:
    vh:get-child(hc,loop).

    run obtemnode (input hc:handle).

    case vh:name :
    when "Tipo" then do:
    create tt-dadosretorno.
    if hc:node-value <> "" then assign tt-dadosretorno.tipo = hc:node-value.
    end.
    when "valor" then do:
    if hc:node-value <> "" then assign tt-dadosretorno.valor = hc:node-value.
    end.
    when "Texto" then do:
    if hc:node-value <> "" then assign tt-dadosretorno.texto = hc:node-value.
    end.
    when "Msg" then do:
    if hc:node-value <> "" then assign tt-dadosretorno.msg = hc:node-value.
    end.
    end case.

    end.
    end.

Compartilhe esta Página