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

XML

Discussão em 'Progress 4GL' iniciado por fasouza, Novembro 14, 2014.

  1. fasouza

    fasouza Membro Participativo

    Estou gerando um XML usando o WRITE-XML exportando um DATASET. Mas ele esta gerando o xmlns e gostaria que não saísse, ou simplesmente apareça apenas as tabelas temporárias e não a linha do DATASET. Gostaria de excluir a linha em amarelo, ou apenas os xmlns

    XML GERADO
    <?xml version="1.0" encoding="utf-8" ?>
    <CustomerEnvelop xmlns:xsd="." xmlns:xsi=".">
    <Customers><
    Customer codigo="0" nome=""/>

    CODIGO
    DEFINE VARIABLE cxml AS LONGCHAR NO-UNDO.
    DEF VAR h-handle AS HANDLE.

    /* DEFINE FRAME f-teste */
    /* cxml */
    /* WITH CENTERED ROW 3 TITLE "Available Customer Credit" USE-TEXT WIDTH 300. */

    DEFINE TEMP-TABLE Customer
    FIELD ID AS INTEGER XML-NODE-TYPE "HIDDEN"
    FIELD Name AS CHARACTER
    .

    DEFINE TEMP-TABLE Orders
    FIELD Customer_ID AS INTEGER XML-NODE-TYPE "HIDDEN"
    FIELD Order_ID AS INTEGER XML-NODE-TYPE "HIDDEN"
    .

    DEFINE TEMP-TABLE Order
    FIELD ID AS INTEGER XML-NODE-TYPE "HIDDEN"
    FIELD Product AS CHARACTER
    FIELD Price AS DECIMAL
    .

    CREATE Customer.
    ASSIGN
    Customer.ID = 5367
    Customer.Name = "Some Customer"
    .

    CREATE Orders.
    ASSIGN
    Orders.Customer_ID = Customer.ID
    Orders.Order_ID = 123
    .
    CREATE Order.
    ASSIGN
    Order.ID = Orders.Order_ID
    Order.Product = "Widget"
    Order.Price = 59
    .
    CREATE Order.
    ASSIGN
    Order.ID = Orders.Order_ID
    Order.Product = "Something"
    .


    DEFINE DATASET teste
    FOR Customer, Orders, Order
    DATA-RELATION FOR Customer, Orders RELATION-FIELDS( ID, Customer_ID ) NESTED FOREIGN-KEY-HIDDEN
    DATA-RELATION FOR Orders, Order RELATION-FIELDS( Order_ID, ID )
    NESTED FOREIGN-KEY-HIDDEN NOT-ACTIVE REPOSITION .

    DATASET teste:WRITE-XML( "LONGCHAR", cxml, TRUE) .

    MESSAGE STRING( cxml ) VIEW-AS ALERT-BOX.
  2. lwazevedo

    lwazevedo Membro Ativo

    Veja se isso resolve o seu problema.

    Código:
    DEFINE VARIABLE hDoc AS HANDLE.
    DEFINE VARIABLE hRoot AS HANDLE.
    DEFINE VARIABLE hRow AS HANDLE.
    DEFINE VARIABLE hField AS HANDLE.
    DEFINE VARIABLE hText AS HANDLE.
    DEFINE VARIABLE hBuf AS HANDLE.
    DEFINE VARIABLE hDBFld AS HANDLE.
    DEFINE VARIABLE i AS INTEGER.
    
    DEFINE TEMP-TABLE Custt NO-UNDO
        FIELD cust-num AS INTEGER
        FIELD NAME     AS CHAR.
    
    
    CREATE Custt.
    ASSIGN
    Custt.cust-num    = 01
    Custt.NAME   = "Fulano".
       
    
    CREATE Custt.
    ASSIGN
        Custt.cust-num = 02
        Custt.NAME     = "Beltrano".
    
    
    
    CREATE X-DOCUMENT hDoc.
    CREATE X-NODEREF hRoot.
    CREATE X-NODEREF hRow.
    CREATE X-NODEREF hField.
    CREATE X-NODEREF hText.
    
    hBuf = BUFFER Custt:HANDLE.
    
    /*set up a root node*/
    hDoc:CREATE-NODE(hRoot,"Customers","ELEMENT").
    hDoc:APPEND-CHILD(hRoot).
    FOR EACH Custt WHERE cust-num < 5:
        hDoc:CREATE-NODE(hRow,"Customer","ELEMENT"). /*create a row node*/
        hRoot:APPEND-CHILD(hRow).  /*put the row in the tree*/
        hRow:SET-ATTRIBUTE("Cust-num",STRING(cust-num)).
        hRow:SET-ATTRIBUTE("Name",NAME).
        /*Add the other fields as tags in the xml*/
        REPEAT i = 1 TO hBuf:NUM-FIELDS:
            hDBFld = hBuf:BUFFER-FIELD(i).
            IF hDBFld:NAME = "Cust-num" OR  hDBFld:NAME = "NAME" THEN NEXT.
            /*create a tag with the field name*/
            hDoc:CREATE-NODE(hField, hDBFld:NAME, "ELEMENT").
            /*put the new field as next child of row*/
            hRow:APPEND-CHILD(hField).
            /*add a node to hold field value*/
            hDoc:CREATE-NODE(hText, "", "TEXT").
                   /*attach the text to the field*/
            hField:APPEND-CHILD(hText).
            hText:NODE-VALUE = STRING(hDBFld:BUFFER-VALUE).
        END.
    END.
    /*write the XML node tree to an xml file*/
    hDoc:SAVE("file","c:\temp\cust.xml").
    
    DELETE OBJECT hDoc.
    DELETE OBJECT hRoot.
    DELETE OBJECT hRow.
    DELETE OBJECT hField.
    DELETE OBJECT hText. 
  3. fasouza

    fasouza Membro Participativo

    Amigo preciso usar o comando

    DATASET teste:WRITE-XML( "LONGCHAR", cxml, TRUE) .
  4. lwazevedo

    lwazevedo Membro Ativo

    O que você quer é mudar o padrão do xml e até onde eu sei não tem como mudar.

    por que você tem que usar o dataset ?

    se for para jogar em uma variável longchar você pode fazer assim. usar o mesmo exemplo que te passei, só mudar a forma de salvar.

    hdoc:SAVE("longchar", cxml, true).
    MESSAGE STRING( cxml ) VIEW-AS ALERT-BOX.

    se não for isso, da uma lida no help sobre o WRITE-XML.

    abs.

Compartilhe esta Página