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

Importação de XML com vários nós

Discussão em 'Progress 4GL' iniciado por willians.ambrosio, Janeiro 30, 2009.

  1. willians.ambrosio

    willians.ambrosio Sem Pontuação

    Bom Dia Pessoal

    Estou com um problema para fazer a importação de um arquivo XML, que possui vários nós.

    Estou deixando anexo os programas e o arquivo para poder facilitar o entendimento do problema.
    O que não estou conseguindo é pegar justamente os node:value dos campos filhos, por exemplo:

    <Pedido layout="WA">
    <Cabecalho>
    <Requisicao>237112</Requisicao>
    <Titulo_Pdc>Cotação de Medicamentos</Titulo_Pdc>
    <Id_Forma_Pagamento>11</Id_Forma_Pagamento>
    <Data_Vencimento>11/01/2007</Data_Vencimento>
    <Hora_Vencimento>11:00</Hora_Vencimento>
    <Moeda>Reais</Moeda>
    <Observacao>Não aceitamos produto com vencimento menor que 2 meses</Observacao>


    <!-- Após esse campo extra não consigo mais localizar os campos seguintes e seus respectivos valores -->



    <Campo_Extra>
    <Nome>Centro de Custo</Nome>
    <Valor>555</Valor>
    </Campo_Extra>
    </Cabecalho>
    <Itens_Requisicao>
    <Item_Requisicao>
    <Codigo_Produto>00282201</Codigo_Produto>
    </Item_Requisicao>
    </Item_Requisicao>
    </Pedido>


    Att.


    Willians Ambrósio

    Arquivos Anexados:

  2. fdantas

    fdantas Administrator Moderador

    Bom dia William tudo bom ?

    Pelo que vi o problema está nesse linha, veja que o nó filho (Campo_extra) nao é texto, então esse if pula ele.

    IF hFieldValue:SUBTYPE NE 'TEXT':U THEN NEXT.


    Abraco
  3. willians.ambrosio

    willians.ambrosio Sem Pontuação

    Bom Dia Dantas

    O problema é justamente pegar os filhos...
    Mesmo tirando essa linha o problema ainda não foi solucionado.
    Precisava de uma regra para pegar os filhos e se necessário os netos das tags.
  4. fdantas

    fdantas Administrator Moderador

    Bom dia William, teste o trecho de código abaixo

    Código:
        REPEAT iNumRecords = 1 TO hRoot:NUM-CHILDREN:
           hRoot:GET-CHILD(hRecord, iNumRecords). 
           IF hRecord:SUBTYPE NE 'ELEMENT':U THEN NEXT.
    
             REPEAT iNumFields = 1 TO hRecord:NUM-CHILDREN:
                    hRecord:GET-CHILD(hXMLField, iNumFields).
                    IF hXMLField:SUBTYPE NE 'ELEMENT':U THEN NEXT.
    
                    REPEAT iNumValues = 1 TO hXMLField:NUM-CHILDREN:
                        hXMLField:GET-CHILD(hFieldValue, iNumValues).
    
                        IF hXMLField:NAME = 'Campo_Extra' THEN
    
                        REPEAT iNumValueExtra = 1 TO hFieldValue:NUM-CHILDREN:
                               hFieldValue:GET-CHILD(hFieldValueExtra, iNumValueExtra).
    
                               MESSAGE hFieldValueExtra:NODE-VALUE SKIP
                                       hFieldValueExtra:NAME
                                   VIEW-AS ALERT-BOX INFO BUTTONS OK.
  5. willians.ambrosio

    willians.ambrosio Sem Pontuação

    Boa Tarde Dantas

    Realmente funcionou agora ele mostra o valor porém o hFieldValueExtra:NAME não traz o campo (tag) referente ao valor que sendo mostrado.
    Como posso pegar esse hFieldValueExtra:NAME.
    Por exemplo eu buscaria if hFieldValueExtra:NAME = Codigo_Produto then...
    Por isso preciso saber exatamente o nome e seu respectivo node-value.
  6. fdantas

    fdantas Administrator Moderador

    Use assim

    hFieldValue:NAME

Compartilhe esta Página