Avalados por :

Comportamento de xsl:sequence, xsl:copy-of, xsl:value-of e xsl:copy: diferenças e usos em XSLT

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

Quando você começa a criar uma função de mapeamento, você encontra o elemento XSLT xsl:sequence como padrão na caixa do editor de funções. Este elemento escreve sequências de nós e/ou valores atômicos na saída. Os conhecedores de XSLT sabem que o XSLT oferece outros elementos que você pode usar para escrever valores nos nós de saída. Além de xsl:sequence, os elementos utilizáveis são xsl:copy-of ou xsl:value-of no Consultor de Integração. Para usar os elementos, é bastante útil entender o comportamento dos elementos XSLT no contexto de um elemento de mapeamento. Os elementos têm um comportamento significativamente diferente. Este blog descreve especialmente o comportamento e a saída dos elementos XSLT, se você os usa em funções de mapeamento de um elemento de mapeamento.


Pertence ao Guia de Mapeamento


Comportamento habitual de xsl:sequence, xsl:copy-of, xsl:value-of e xsl:copy


Se você usar os elementos XSLT xsl:sequence, xsl:copy-of ou xsl:value-of em um script XSLT que não é gerado pelo Consultor de Integração, você obterá as seguintes diferenças:


  • xsl:sequence - é uma referência ao objeto de entrada e retorna a entrada sem alterações como uma sequência e/ou valores atômicos na saída.
  • xsl:copy-of - retorna uma cópia completa da entrada e a escreve na saída.
  • xsl:value-of - retorna um valor atômico do nó selecionado e todos os nós baseados em texto descendentes. Os valores dos nós são concatenados.
  • xsl:copy - cria uma cópia do nó atual na entrada na saída.



Ambos, xsl:sequence e xsl:copy-of têm um comportamento semelhante e podem ser substituídos entre si na maioria dos casos. A principal diferença entre xsl:sequence e xsl:copy-of pode ser expressa pelo seguinte exemplo que mostra claramente o caráter de referência de xsl:sequence.



Entrada:


...

XSLT:


...

Ambas as variáveis, $vSeq e $vCopy, contêm o elemento e o valor de TextElementText. Mas o TextElementText na variável $vSeq é apenas uma referência e o objeto de entrada ainda é conhecido. A variável $vCopy mantém uma cópia de TextElementText. A saída mostrada abaixo mostra que ao usar a variável $vSeq, obtemos um elemento Language não vazio e ao usar a variável $vCopy, ficamos com um elemento Language vazio.


...

Como é esse comportamento no Consultor de Integração?


Uma das principais intenções do Consultor de Integração é gerar scripts de transformação que escrevam valores de uma carga fonte estruturada para uma carga alvo estruturada. As estruturas sempre seguem esquemas de interfaces predefinidos de mensagens comerciais. Os XSLTs gerados pelo Consultor de Integração atomizam implicitamente os valores de entrada por meio de um xsl:value-of, porque essas funções de mapeamento são usadas para escrever os resultados nos nós folha alvo mapeados. Isso elimina as diferenças de outros elementos XSLT xsl:sequence e xsl:copy-of, já que o foco desses elementos é escrever ou copiar sequências e estruturas complexas.



Mas por que xsl:sequence é o elemento XSLT padrão na função do elemento de mapeamento?


Principalmente por razões históricas, porque xsl:sequence é mais eficiente que xsl:copy-of, e mantém os tipos relacionados com os nós ao processar a entrada na saída. Esta é também a motivação para que os desenvolvedores de XSLT 2.0 usem principalmente xsd:sequence. Originalmente, nosso desenvolvimento começou com o retorno de vários nós ao processar estruturas complexas, que deveriam ser usadas para o tipo de ativação das instâncias alvo. Mas esse tipo de ativação mudou. Agora é possível estabelecer mapeamentos condicionais com seu comportamento de ativação específico. O blog ###BLOG### fornece mais detalhes a respeito.


Como posso usar xsl:copy?


O elemento xsl:copy é geralmente usado para copiar o nó de entrada atual na saída. O efeito real depende se o nó é um elemento, um atributo ou um nó de texto. Como o Consultor de Integração já considera os nós predefinidos no lado fonte e alvo, não faz sentido usar um xsl:copy com uma seleção de apenas nós. A seguinte figura mostra as consequências do uso diferente de xsl:copy. O primeiro exemplo é um xsl:copy do valor usando text(), que localiza o valor do nó de contexto. A seleção do xsl:copy no segundo exemplo termina apenas com o próprio nó folha. Isso não retorna 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?