Asignar nombres de nodos
En la mayoría de las asignaciones de datos de MapForce el objetivo es leer valores de un componente de origen y escribir valores en un componente de destino. Sin embargo, en algunos casos el objetivo no es solo acceder a los valores de los nodos de origen, sino al nombre de los nodos. Por ejemplo, puede tratarse de una asignación que lea el nombre de los elementos o atributos (y no sus valores) de un archivo XML de origen y convertir esos nombres en valores de elemento o atributo en el XML de destino.
Imaginemos que tenemos un archivo XML que contiene una lista de productos. Cada producto tiene este formato:
<product> <id>1</id> <color>red</color> <size>10</size> </product> |
Nuestro objetivo es convertir información sobre cada producto en pares nombre/valor. Por ejemplo:
<product> |
En este caso, necesitaremos acceder al nombre de los nodos de forma dinámica para realizar conversiones de datos.
Nota: | la transformación del ejemplo también puede conseguirse con las funciones node-name y static-node-name de la biblioteca core. No obstante, en nuestro ejemplo necesitamos conocer exactamente los nombres de elemento del componente de origen y necesitamos conectar cada uno de los elementos manualmente con el componente de destino. Además, puede que las funciones mencionadas no sean suficiente para filtrar o agrupar nodos por nombre o para manipular el tipo de datos de los nodos. |
No solo puede acceder al nombre de los nodos de forma dinámica cuando necesite leer nombres de nodo, sino también cuando necesite escribirlos. En una asignación normal y corriente el nombre de los atributos o elementos del componente de destino siempre se conoce antes de que se ejecute la asignación. Estos nombres de atributo o elemento vienen del esquema subyacente del componente. Sin embargo, con los nombres de nodo dinámicos podrá crear atributos o elementos nuevos cuyo nombre no se conoce antes de que se ejecute la asignación. Concretamente, el nombre del atributo o elemento viene dado por la asignación propiamente dicha (por el componente de origen).
Para poder acceder a elementos o atributos secundarios de forma dinámica el nodo debe tener elementos o atributos secundarios y el nodo principal no puede ser el nodo XML raíz. |
Puede trabajar con nombres de nodo dinámicos si en la asignación de datos participan componentes de este tipo:
•XML
•CSV/FLF*
* Solo compatible con MapForce Professional o Enterprise Edition.
Nota: | si se trata de componentes CSV/FLF el acceso dinámico implica poder acceder a los campos en lugar de a los nodos porque las estructuras CSV/FLF no tienen nodos. |
Cuando el destino de la asignación es un archivo CSV o FLF, los campos deben estar definidos en la configuración del componente (y el nombre, el orden y el número de los campos de destino no se puede cambiar). Al contrario de los archivos XML, el formato de los archivos de texto es fijo así que solamente se puede manipular el valor de los campos (no se puede modificar el nombre, el número ni el orden de los campos). |
Puede trabajar con nombres de nodo dinámicos si selecciona estos lenguajes de transformación: motor integrado BUILT-IN*, XSLT2, XQuery*, C#*, C++*, Java*.
* Estos lenguajes solo son compatibles con MapForce Professional o Enterprise Edition.
Para más información consulte el apartado Obtener acceso al nombre de los nodos o el ejemplo del apartado Ejemplo: asignar nombres de elemento a valores de atributo.