Avalados por :

Comportamiento de xsl:sequence, xsl:copy-of, xsl:value-of y xsl:copy: diferencias y usos en XSLT

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 13 Vistas
0
Cargando...

Una vez que comienzas la creación de una función de mapeo, encuentras el elemento XSLT xsl:sequence como predeterminado en el cuadro del editor de funciones. Este elemento escribe secuencias de nodos y/o valores atómicos en la salida. Los conocedores de XSLT saben que XSLT ofrece otros elementos que puedes usar para escribir valores en los nodos de salida. Aparte de xsl:sequence, los elementos utilizables son xsl:copy-of o xsl:value-of en el Asesor de Integración. Para utilizar los elementos, es bastante útil comprender el comportamiento de los elementos XSLT en el contexto de un elemento de mapeo. Los elementos tienen un comportamiento significativamente diferente. Este blog describe especialmente el comportamiento y la salida de los elementos XSLT, si los usas en funciones de mapeo de un elemento de mapeo.


Pertenece a la Guía de Mapeo


Comportamiento habitual de xsl:sequence, xsl:copy-of, xsl:value-of y xsl:copy


Si utilizas los elementos XSLT xsl:sequence, xsl:copy-of o xsl:value-of en un script XSLT que no es generado por el Asesor de Integración, obtendrás las siguientes diferencias:


  • xsl:sequence - es una referencia al objeto de entrada y devuelve la entrada sin cambios como una secuencia y/o valores atómicos en la salida.
  • xsl:copy-of - devuelve una copia completa de la entrada y la escribe en la salida.
  • xsl:value-of - devuelve un valor atómico del nodo seleccionado y todos los nodos basados en texto descendientes. Los valores de los nodos se unen.
  • xsl:copy - crea una copia del nodo actual en la entrada en la salida.



Ambos, xsl:sequence y xsl:copy-of tienen un comportamiento similar y pueden reemplazarse entre sí en la mayoría de los casos. La principal diferencia entre xsl:sequence y xsl:copy-of puede expresarse mediante el siguiente ejemplo que muestra claramente el carácter de referencia de xsl:sequence.



Entrada:


...

XSLT:


...

Ambas variables, $vSeq y $vCopy, contienen el elemento y el valor de TextElementText. Pero el TextElementText en la variable $vSeq es solo una referencia y el objeto de entrada sigue siendo conocido. La variable $vCopy mantiene una copia de TextElementText. La salida mostrada a continuación muestra que al usar la variable $vSeq se obtiene un elemento Language no vacío y al usar la variable $vCopy nos deja con un elemento Language vacío.


...

¿Cómo es este comportamiento en el Asesor de Integración?


Una de las principales intenciones del Asesor de Integración es generar scripts de transformación que escriban valores de una carga fuente estructurada a una carga objetivo estructurada. Las estructuras siempre siguen esquemas de interfaces predefinidos de mensajes comerciales. Los XSLTs generados por el Asesor de Integración atomizan implícitamente los valores de entrada mediante un xsl:value-of, porque estas funciones de mapeo se utilizan para escribir los resultados en los nodos hoja objetivo mapeados. Esto elimina las diferencias de otros elementos XSLT xsl:sequence y xsl:copy-of, ya que el enfoque de estos elementos es la escritura o copia de secuencias y estructuras complejas.



¿Pero por qué xsl:sequence es el elemento XSLT predeterminado en la función del elemento de mapeo?


Principalmente tiene razones históricas, porque xsl:sequence es más eficiente que xsl:copy-of, y mantiene los tipos relacionados con los nodos al procesar la entrada en la salida. Esta es también la motivación para que los desarrolladores de XSLT 2.0 utilicen principalmente xsd:sequence. Originalmente, nuestro desarrollo comenzó con el retorno de varios nodos al procesar estructuras complejas, que deberían usarse para el tipo de activación de las instancias objetivo. Pero este tipo de activación ha cambiado. Ahora es posible establecer mapeos condicionales con su comportamiento de activación específico. El blog ###BLOG### te brinda más detalles al respecto.


¿Cómo puedo usar xsl:copy?


El elemento xsl:copy se utiliza generalmente para copiar el nodo de entrada actual en la salida. El efecto real depende de si el nodo es un elemento, un atributo o un nodo de texto. Dado que el Asesor de Integración ya considera los nodos predefinidos en el lado fuente y objetivo, no tiene sentido usar un xsl:copy con una selección de solo nodos. La siguiente figura muestra las consecuencias del uso diferente de xsl:copy. El primer ejemplo es una xsl:copy del valor usando text(), que localiza el valor del nodo de contexto. La selección de la xsl:copy en el segundo ejemplo termina solo con el nodo hoja en sí. Esto no devuelve nada,

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

Sin respuestas

No hay respuestas para mostrar No hay respuestas para mostrar Se el primero en responder

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?