Conversión de datos en un mensaje XML

A menudo es necesario convertir datos de un formato a otro. Por ejemplo, en un mensaje los tipos de elementos se conocen por los nombres y en otro mensaje los elementos se conocen por números. Por ejemplo:

Nombre tipo        Código tipo

Golosinas          2000
Quiosco            3000
Ferretería         4000

Examine el siguiente mensaje de entrada:

<Data>
  <Items>
    <Item>
      <Cat>1000</Cat>
      <Description>Barra de chocolate</Description>
      <Type>Golosinas</Type>
    </Item>
    <Item>
      <Cat>1001</Cat>
      <Description>Periódico</Description>
      <Type>Quiosco</Type>
    </Item>
    <Item>
      <Cat>1002</Cat>
      <Description>Fregadero</Description>
      <Type>Ferretería</Type>
    </Item>
  </Items>
  <TranslateTable>
    <Translate>
      <Name>Golosinas</Name>
      <Number>2000</Number>
    </Translate>
    <Translate>
      <Name>Quiosco</Name>
      <Number>3000</Number>
    </Translate>
    <Translate>
      <Name>Ferretería</Name>
      <Number>4000</Number>
    </Translate>
  </TranslateTable>
</Data>

Este mensaje tiene dos secciones: la primera es una lista de elementos en que cada uno de ellos tiene un número de catálogo y un tipo; la segunda es una tabla de conversiones entre los nombres de tipo descriptivo y los códigos de tipo numérico. Si incluye un nodo Compute con la siguiente transformación:

SET OutputRoot.XML.Result.Items.Item[] = 
   (SELECT M.Cat, M.Description, T.Number As Type
     FROM 
       InputRoot.XML.Data.Items.Item[]               As M,
       InputRoot.XML.Data.TranslateTable.Translate[] As T
     WHERE M.Type = T.Name
   );

se genera el siguiente mensaje de salida:

<Result>
  <Items>
    <Item>
      <Cat>1000</Cat>
      <Description>Barra de chocolate</Description>
      <Type>2000</Type>
    </Item>
    <Item>
      <Cat>1001</Cat>
      <Description>Periódico</Description>
      <Type>3000</Type>
    </Item>
    <Item>
      <Cat>1002</Cat>
      <Description>Fregadero</Description>
      <Type>4000</Type>
    </Item>
  </Items>
</Result>

En el resultado, cada nombre de tipo se ha convertido a su código correspondiente. En este ejemplo, tanto los datos como la tabla de conversiones estaban en el mismo árbol de mensajes, aunque esto no es un requisito. Por ejemplo, la tabla de conversiones se podría haber codificado en una base de datos o un nodo Compute anterior podría haberla configurado en LocalEnvironment.

Conceptos relacionados
Flujos de mensajes
ESQL
Diseño de mensajes

Tareas relacionadas
Diseño de un flujo de mensajes
Definición del contenido del flujo de mensajes
Gestión de archivos ESQL

Referencia relacionada
Nodo Compute
Nodo Database
Nodo Filter
ESQL
Función SELECT
Sentencia SET