Saltar al contenido principal
Versión: 20 R7 BETA

XML DECODE

XML DECODE ( valor XML ; objeto4D )

ParámetroTipoDescripción
valor XMLTextoValor de tipo texto proveniente de una estructura XML
objeto4DField, VariableVariable o campo 4D que recibe el valor XML convertido

Descripción

El comando XML DECODE convierte un valor guardado como una cadena XML en un valor 4D. La conversión se efectúa automáticamente en función de las siguientes reglas:

ValorEjemplosConversión en sistema inglés
numérico8,58.5Real: 8.5
Booleano1 0 o true falseBooleano: True/False
BLOBDecodificación Base64
ImágenesDecodificación Base64 + comando BLOB to picture
Fechas2009-10-25T01:03:20+01:00!10/25/2009! -> Supresión de la parte hora y de la zona horaria
Horas2009-10-25T01:03:20+01:00?01:03:20? -> Supresión de la parte fecha. Atención: la zona horaria se tiene en cuenta si es diferente de la hora local. Por ejemplo: "2009-10-25T01:03:20+05:00" se decodificará ?21:03:20? en UTC+1 hora local

Si el tipo de parámetro 4Dvar no está definido, el tipo texto se utiliza por defecto.

Ejemplo

Importación de datos desde un documento XML en el cual los valores se guardan como atributos.
Ejemplo del documento XML:

<CD Date="2003-01-01T00:00:00Z" Description="This double CD reissued by EMI in 1995 combines 4 Stabat mater hymns. One by Rossini interpreted by the Berlin Symphony Orchestra, directed by Karl Forster. Followed by a work of Verdi, by the Philharmonic Orchestra, directed by Carlo Maria Giulini. On the second CD, you will find Francis Poulenc interpreted by Régine Crespin. This compilation ends with a little-known version, that of the Polish composer Karol Szymanowski. Polish National Radio Symphony Orchestra directed by Antoni Wit" Double="true" Duration="7246" Type="Sacred music" CD_ID="5" Performer="Various" Price="8.5" Title="4 Stabat mater"/>
 Repeat
    MyEvent:=SAX Get XML node(DocRef)
 
    Case of
       :(MyEvent=XML Start Element)
          ARRAY TEXT(arrAttrNames;0)
          ARRAY TEXT(arrAttrValues;0)
          SAX GET XML ELEMENT(DocRef;vName;vPrefix;arrAttrNames;arrAttrValues)
          If(vName="CD")
             CREATE RECORD([CD])
             For($i;1;Size of array(arrAttrNames))
                $attrName:=arrAttrNames{$i}
                Case of
                   :($attrName="CD_ID")
                      XML DECODE(arrAttrValues{$i};[CD]CD_ID)
                   :($attrName="Title")
                      [CD]Work:=arrAttrValues{$i}
                   :($attrName="Price")
                      XML DECODE(arrAttrValues{$i};[CD]Price)
                   :($attrName="Date")
                      XML DECODE(arrAttrValues{$i};[CD]Date entered)
                   :($attrName="Duration")
                      XML DECODE(arrAttrValues{$i};[CD]Total_duration)
                   :($attrName="Double")
                      XML DECODE(arrAttrValues{$i};[CD]Double_CD)
                End case
             End for
          End if
          ...
    End case
 Until(MyEvent=XML End Document)

Ver también

BASE64 DECODE
BASE64 ENCODE