Prezados, bom dia! Estou trabalhando com um código progress para ler arquivo xml e retornar os dados em TXT, conforme abaixo: Código: DEFINE VARIABLE hDoc AS HANDLE. DEFINE VARIABLE hRoot AS HANDLE. def var cartao as char format "x(20)". CREATE X-DOCUMENT hDoc. CREATE X-NODEREF hRoot. DEFINE VARIABLE hBuf AS HANDLE NO-UNDO. DEFINE VARIABLE nome AS CHARACTER NO-UNDO. DEFINE VARIABLE c-campo AS CHARACTER NO-UNDO. DEFINE VARIABLE c-arquivo AS CHARACTER NO-UNDO. DEFINE VARIABLE c-log AS CHARACTER NO-UNDO. DEFINE TEMP-TABLE mensagem NO-UNDO FIELD nome AS char format "x(30)" FIELD cpf AS char format "x(14)" FIELD codigoBeneficiario as char format "x(20)" FIELD dataContratacao as char format "x(10)" FIELD dataCancelamento as char format "x(10)" FIELD numeroPlanoANS as char format "x(09)". hDoc:LOAD("file","c:\sib\conf.xml",FALSE). hDoc:GET-DOCUMENT-ELEMENT(hRoot). RUN GetChildren(hRoot, 1). output to \sib\testes-xml-ANS.txt. FOR EACH mensagem: DISPLAY mensagem with scrollable stream-io. END. DELETE OBJECT hDoc. DELETE OBJECT hRoot. PROCEDURE GetChildren: DEFINE INPUT PARAMETER hParent AS HANDLE. DEFINE INPUT PARAMETER level AS INTEGER. DEFINE VARIABLE i-cont AS INTEGER. DEFINE VARIABLE hNoderef AS HANDLE. DEFINE VARIABLE hDBFld AS HANDLE. DEFINE VARIABLE good AS LOGICAL. DEFINE VARIABLE texto AS CHARACTER NO-UNDO. CREATE X-NODEREF hNoderef. REPEAT i-cont = 1 TO hParent:NUM-CHILDREN: good = hParent:GET-CHILD(hNoderef,i-cont). IF NOT good THEN LEAVE. IF hNoderef:NAME <> '#Text' THEN nome = hNoderef:NAME. IF hNoderef:NAME = 'identificacao' THEN DO: CREATE mensagem. hBuf = BUFFER mensagem:HANDLE. END. IF hNoderef:SUBTYPE = "text" AND hParent:NAME = nome THEN DO: texto = hNoderef:NODE-VALUE. ASSIGN c-campo = STRING(hBuf:BUFFER-FIELD(nome)) NO-ERROR. IF c-campo <> ? THEN DO: hDBFld = hBuf:BUFFER-FIELD(nome). hDBFld:BUFFER-VALUE = hNoderef:NODE-VALUE. END. END. RUN GetChildren(hNoderef, (level + 1)). END. DELETE OBJECT hNoderef. END PROCEDURE. Agora o exemplo da composicao do arquivo XML: Código: <mensagem> <ansParaOperadora> <conferencia> <beneficiario cco="123456789012" situacao="INATIVO" dataAtualizacao="2000-01-01"> <identificacao> <cpf>01234567890</cpf> <pisPasep>12345678901</pisPasep> <nome>FULANO SILVA E SILVA</nome> <sexo>3</sexo> <dataNascimento>1960-01-01</dataNascimento> <nomeMae>BELTRANO SILVA E SILVA</nomeMae> </identificacao> <endereco> <logradouro>RUA VII DE SETEMBRO, 1000</logradouro> <bairro>JD INDEPENDENCIA</bairro> <codigoMunicipio>999999</codigoMunicipio> <cep>71000000</cep> <resideExterior>0</resideExterior> </endereco> <vinculo> <codigoBeneficiario>9991234567891234</codigoBeneficiario> <dataContratacao>1999-05-15</dataContratacao> <dataCancelamento>2004-04-15</dataCancelamento> <numeroPlanoANS>999999999</numeroPlanoANS> </vinculo> </beneficiario> Ocorre que, para os campos a partir da tag "identificacao" consigo retornar todos, contudo, preciso de uma tag importante que não estou conseguindo retornar, que é essa linha, mais especificamente o "beneficiario cco": Código: <beneficiario cco="123456789012" situacao="INATIVO" dataAtualizacao="2000-01-01"> . Gostaria de saber se existe uma alternativa a ser incluida no código progress para que esse campo fosse retornado. Desde já agradeço o tempo dispensado!
Não manjo muito de xml, mas sua tag de fechamento nao deveria estar igual a de abertura? <beneficiario cco="123456789012" situacao="INATIVO" dataAtualizacao="2000-01-01"> </beneficiario cco="123456789012" situacao="INATIVO" dataAtualizacao="2000-01-01"> e se vc precisa do cco, situacao, dataAtualizacao isso não deveriam ser "filhos" de uma tag <beneficiario></beneficiario> ? me parece que vc esta tentando obter informacao do nome da tag e nao do conteudo dela...