Altova MapForce 2023 Enterprise Edition

Devuelve la posición de un nodo dentro de la secuencia de la que forma parte. Esta función se puede usar, por ejemplo, para numerar elementos automáticamente de forma secuencial.

mf-func-position

 

Lenguajes

Built-in, C++, C#, Java, XQuery#, XSLT 1.0 y, XSLT 1.0, XSLT 2.0, XSLT 3.0.

 

Parámetros

Nombre

Descripción

nodo

Esta entrada debe recibir una conexión desde un elemento de la asignación que suministre una secuencia de cero o más valores. Por ejemplo, la conexión puede provenir de un elemento XML de origen, un campo CSV, un registro de BD, etc.

 

Ejemplo

La función position permite determinar la posición de un nodo de una secuencia o usar una posición concreta para filtrar elementos dependiendo de su posición. Esta asignación viene acompañada por un archivo de diseño de asignación que encontrará en esta ruta: <Documentos>\Altova\MapForce2023\MapForceExamples\ContactsFromBranchOffices.mfd.

 

mf_map_contactsfrombranchoffices_zoom80

ContactsFromBranchOffices.mfd

En la asignación anterior, el archivo XML de origen contiene tres oficinas secundarias. Una oficina secundaria puede contener un número cualquiera de elementos secundarios Contact. Los objetivos de la asignación son los siguientes:

 

Extraer todos los elementos Contact del archivo XML de origen y escribirlos en el archivo XML de destino.

Asignar a cada contacto un número de identificación único (el elemento ID del archivo XML de destino).

El ID de cada contacto debe tener el formato CXX-YYYYY, donde X identifica el número de oficina e Y el número de contacto. Si el número de oficina ocupa menos que dos caracteres es necesario añadirle ceros a la izquierda. Asimismo, si el número de contactos ocupa menos que cinco caracteres entera ocupe necesario añadirle ceros a la izquierda. En consecuencia, el número identificativo del primer contacto de la primera oficina sería C01-00001.

 

Para conseguir los objetivos de la asignación se han usado varias funciones de MapForce, entre las que está la función position. La función position obtiene la posición de cada oficina. La siguiente obtiene la posición de cada uno de los contactos dentro de cada oficina.

 

Al usar la función position es importante considerar el contexto de asignación actual. Concretamente, al ejecutar la asignación se establece el contexto inicial desde el elemento raíz del componente de destino al elemento de origen al que está conectado (aunque sea de forma indirecta mediante funciones). En este ejemplo, la función position de más arriba procesa la secuencia de todas las oficinas y genera inicialmente el valor 1, que corresponde a la primera oficina de la secuencia. La función position de más abajo genera números secuenciales que corresponden a la posición del contacto en el contexto de esa oficina (1, 2, 3, etc.). Tenga en cuenta que esta secuencia "interna" se reinicia y vuelve a empezar desde el 1 cuando se procesa la oficina siguiente. Las dos funciones pad-string-left usan ceros de relleno en los números generados, tal y como se explica más arriba. La función concat opera en el contexto de cada contacto (debido a la conexión principal del componente de entrada al Contact de destino). La función junta todos los valores computados y devuelve el número de identificación único de cada contacto.

 

A continuación mostramos el resultado que genera la asignación anterior (tenga en cuenta que hemos eliminado algunos de los registros para que ek código se pueda leer mejor):

 

<Contacts>
<Contact>
<ID>C01-00001</ID>
<First>Vernon</First>
<Last>Callaby</Last>
</Contact>
<Contact>
<ID>C01-00002</ID>
<First>Frank</First>
<Last>Further</Last>
</Contact>
<!-- ... -->
<Contact>
<ID>C02-00001</ID>
<First>Steve</First>
<Last>Meier</Last>
</Contact>
<Contact>
<ID>C02-00002</ID>
<First>Theo</First>
<Last>Bone</Last>
</Contact>
<!-- ... -->
</Contacts>

 

También puede haber casos en los que tenga que obtener la posición de los elementos resultantes una vez aplicado un filtro. Tenga en cuenta que el componente filtro no es una función de secuencia, por lo que no se puede usar directamente junto con la función position para buscar la posición de elementos filtrados. Esto se puede hacer de forma indirecta añadiendo un componente de variable a la asignación. Por ejemplo, la asignación siguiente es una versión simplificada de la anterior. El archivo de diseño de esta asignación está en: <Documentos>\Altova\MapForce2023\MapForceExamples\PositionInFilteredSequence.mfd.

mf_map_PositionInFilteredSequence

Los resultados de los componentes de variable siempre son secuencias. Por tanto, en la asignación anterior la función position recorre la secuencia creada por la variable y devuelve la posición de cada uno de los elementos de esa secuencia. Esta asignación se analiza más detalladamente en Ejemplo: filtrar y numerar nodos.

© 2017-2023 Altova GmbH