1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Duvida Leitura de tag em determinado XML

Discussão em 'Progress 4GL' iniciado por waxxyy, Dezembro 6, 2017.

  1. waxxyy

    waxxyy Sem Pontuação

    Bom dia pessoa,

    estou desenvolvendo um sistema pra importar a NFe de entrada pra dentro do meu sistema mas estou com dificuldade em importar os valores das TAGs do XML. Mas o fato da importação vir como texto (como se tivesse abrindo o XML no bloco de notas), o XML inteiro vem em uma linha só, dificultando a importação. Alguem tem alguma dica de como faço para o progress procurar o valor dentro de uma determinada TAG e gravar o registro? Obrigado
    reissobr curtiu isso.
  2. JGSilva

    JGSilva Sem Pontuação

    bom dia,
    o fato de estar em uma unica linha não afetaria a importação, pois o XML trata os campos/valores por TAGs.

    Você conseguirá ver/analisar o XML em quebras de linhas/TAGs se abrir com o I.E (Internet Explorer).
  3. waxxyy

    waxxyy Sem Pontuação

    e como faço pro progress procurar determinado valor de determinada tag do arquivo?
  4. LeandroSantos

    LeandroSantos Membro Participativo

    Anexo um programinha bem simples que fiz pra pegar o protocolo de autorização da NFe.

    Chamada do programa:
    Código:
    def var valorTag as char format "X(44)".
    run ReadTag.p (input "L:\temp\procnfe.xml",
                   input "nProt",
                   output valorTag).
    disp valorTag.

    Arquivos Anexados:

    jeffyssantos curtiu isso.
  5. ChacMaster

    ChacMaster Membro Participativo

    Boa Tarde senhores,

    Comecei a utilizar datasets para importação de XML, e JSON.

    Não tenho um exemplo em mãos no momento, mas funciona mais ou menos assim:

    Define-se as temp-tables de acordo com o layout a ser importado, cada nível vira uma TT.

    Código:
    <xml>
    <clientes>
    <cliente>
    <nome>fulano</nome>
    <cod>1</cod>
    <cliente>
    </clientes>
    Então teríamos uma tt-clientes e uma tt-cliente.

    Depois se define o dataset, fazendo qualquer relacionamento necessário entre as TTs.

    Aí depois tem o comandinho READ-XML ou READ-JSON, conforme a necessidade. Ele vai ler o (Arquivo ou variável, etc..) e popular as temps.
  6. joelscampos

    joelscampos Membro Participativo

    Como o @ChacMaster citou, dá para transferir o longchar que contém o xml para um dataset.

    Abaixo um exemplo, para entender a idéia:

    Código:
    DEF TEMP-TABLE tt-conta NO-UNDO NAMESPACE-URI "xxx" NAMESPACE-PREFIX "yyy"
        FIELD cd-unidade            AS INT
        FIELD nr-docto              AS INT
        FIELD dt-documento          AS DATE
        FIELD cd-unidade-carteira   AS INT      SERIALIZE-HIDDEN    // "SERIALIZE-HIDDEN" esconde o campo na hora de montar o xml ou json.
        FIELD cd-carteira           AS DEC      SERIALIZE-HIDDEN.
    
    DEF TEMP-TABLE tt-movimento NO-UNDO
        FIELD cd-unidade    AS INT
        FIELD nr-docto      AS INT
        FIELD vl-movimento  AS DEC.
    
    DEF TEMP-TABLE tt-beneficiario NO-UNDO
        FIELD cd-unidade-carteira   AS INT
        FIELD cd-carteira           AS DEC
        FIELD nm-usuario            AS CHAR
        FIELD dt-nascimento         AS DATE.
    
    DEF DATASET datasetSaida FOR tt-conta, tt-movimento, tt-beneficiario
        DATA-RELATION apelido-para-relacao          FOR tt-conta, tt-movimento      RELATION-FIELDS(cd-unidade, cd-unidade,
                                                                                                    nr-docto, nr-docto) NESTED
        DATA-RELATION apelido-relacao-conta-benef   FOR tt-conta, tt-beneficiario   RELATION-FIELDS(cd-unidade-carteira, cd-unidade-carteira,
                                                                                                    cd-carteira,         cd-carteira) NESTED
        FOREIGN-KEY-HIDDEN. // "FOREIGN-KEY-HIDDEN" indica que ‚ para esconder os campos "SERIALIZE-HIDDEN".
    
    CREATE tt-conta.
    ASSIGN tt-conta.nr-docto                = 1
           tt-conta.dt-documento            = 01/01/2018
           tt-conta.cd-unidade-carteira     = 970
           tt-conta.cd-carteira             = 1111.
    CREATE tt-conta.
    ASSIGN tt-conta.nr-docto                = 2
           tt-conta.dt-documento            = 01/02/2018
           tt-conta.cd-unidade-carteira     = 970
           tt-conta.cd-carteira             = 2222.
    
    CREATE tt-movimento.
    ASSIGN tt-movimento.nr-docto    = 1
           tt-movimento.vl-movimento = 11.11.
    
    CREATE tt-movimento.
    ASSIGN tt-movimento.nr-docto    = 2
           tt-movimento.vl-movimento = 22.22.
    
    
    
    CREATE tt-beneficiario.
    ASSIGN tt-beneficiario.cd-unidade-carteira  = 970
           tt-beneficiario.cd-carteira          = 1111
           tt-beneficiario.nm-usuario           = "Usuario 1"
           tt-beneficiario.dt-nascimento        = 01/01/1900.
    
    CREATE tt-beneficiario.
    ASSIGN tt-beneficiario.cd-unidade-carteira  = 970
           tt-beneficiario.cd-carteira          = 2222
           tt-beneficiario.nm-usuario           = "Usuario 2"
           tt-beneficiario.dt-nascimento        = 02/02/1900.
    
    
    DATASET datasetSaida:WRITE-XML("FILE", "c:\spool\teste.xml", TRUE).
    DATASET datasetSaida:WRITE-JSON("FILE", "c:\spool\teste.json", TRUE).
    
    
    /*----------------
    Visualiza na tela
    -------------------------------------*/
    DEF VAR big-var AS LONGCHAR NO-UNDO.
    
    DATASET datasetSaida:WRITE-XML("LONGCHAR", big-var, TRUE).
    
    DISP
        big-var
        VIEW-AS EDITOR LARGE INNER-CHARS 100 INNER-LINES 50
        WITH THREE-D VIEW-AS DIALOG-BOX SIDE-LABELS WIDTH 120 FRAME f-teste.
    PAUSE.
    
    DATASET datasetSaida:WRITE-JSON("LONGCHAR", big-var, TRUE).
    
    
    DISP
        big-var
        VIEW-AS EDITOR LARGE INNER-CHARS 100 INNER-LINES 50
        WITH THREE-D VIEW-AS DIALOG-BOX SIDE-LABELS WIDTH 120 FRAME f-teste.
    PAUSE.
    
    
    roberto.silva curtiu isso.

Compartilhe esta Página