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 sólo 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 sólo 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*
* Sólo compatible con las ediciones Professional o Enterprise de MapForce.
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 sólo 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.