Política XSLTransform

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación de Apigee Edge.

Icono de política

Qué

La política XSLTransform aplica transformaciones de lenguaje de hoja de estilo extensible (XSLT) personalizadas a mensajes XML, lo que te permite transformar estos mensajes de XML a otro formato, como HTML o texto sin formato. Esta política se suele usar para integrar aplicaciones que admiten XML, pero que requieren formatos basados en XML diferentes para los mismos datos.

Esta política es una política extensible y su uso puede tener implicaciones en cuanto a costes o utilización, en función de tu licencia de Apigee. Para obtener información sobre los tipos de políticas y las implicaciones de uso, consulta Tipos de políticas.

Entradas

La política XSL acepta las siguientes entradas:

  • Obligatorio. Nombre de una hoja de estilo XSLT que contiene un conjunto de reglas de transformación almacenadas en el proxy de API en /resources/xsl.
  • Obligatorio: el XML que se va a transformar (normalmente, un mensaje de solicitud o de respuesta).
  • (Opcional) Nombre de una variable que almacena el resultado.
  • (Opcional) Parámetros que coincidan con los parámetros de la hoja de estilo XSL.

Procesador de análisis

Apigee se basa en el procesador Saxon XSLT y admite XSLT 1.0 y 2.0.

Elementos XSL no admitidos

La política XSL no admite los siguientes elementos XSL:

  • <xsl:include>
  • <xsl:import>

Ejemplos

En los siguientes ejemplos se muestra un flujo de transformación XSL:

Política de XSL -->

<XSL name="TransformXML">
  <ResourceURL>xsl://my_transform.xsl</ResourceURL>
  <Source>request</Source>
</XSL>

Política XSL sencilla. Ve al siguiente ejemplo para ver la hoja de estilo XSLT a la que se hace referencia en la política (my_transform.xsl). El elemento <Source> es importante. Por ejemplo, si el XML que quieres transformar está en la respuesta, la transformación no se producirá a menos que asignes el valor response a <Source> (y la política esté asociada al flujo de respuesta). Sin embargo, en este caso, el XML que se va a transformar está en la solicitud.

Hoja de estilo XSLT -->

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="text"/>
  <xsl:variable name="newline">
    <xsl:text></xsl:text>
  </xsl:variable>
  <xsl:template match="/">
  <xsl:text>&lt;Life&gt;</xsl:text>
    <xsl:value-of select="$newline"/>
    <xsl:text>Here are the odd-numbered items from the list:</xsl:text>
    <xsl:value-of select="$newline"/>
    <xsl:for-each select="list/listitem">
      <xsl:if test="(position() mod 2) = 1">
        <xsl:number format="1. "/>
        <xsl:value-of select="."/>
        <xsl:value-of select="$newline"/>
      </xsl:if>
    </xsl:for-each>
  <xsl:text>&lt;/Life&gt;</xsl:text>
</xsl:template>
</xsl:stylesheet>

La hoja de estilo my_transform.xsl a la que se hace referencia en la política. Ve al siguiente ejemplo para ver un ejemplo de mensaje XML entrante.

Mensaje -->

<?xml version="1.0"?>
<list>
  <title>A few of my favorite albums</title>
  <listitem>A Love Supreme</listitem>
  <listitem>Beat Crazy</listitem>
  <listitem>Here Come the Warm Jets</listitem>
  <listitem>Kind of Blue</listitem>
  <listitem>London Calling</listitem>
  <listitem>Remain in Light</listitem>
  <listitem>The Joshua Tree</listitem>
  <listitem>The Indestructible Beat of Soweto</listitem>
</list>

Mensaje de ejemplo en la solicitud (indicado en el elemento <Source>request</Source> de la política en el primer ejemplo).

Mensaje transformado

<Life>
Here are the odd-numbered items from the list:
1. A Love Supreme
3. Here Come the Warm Jets
5. London Calling
7. The Joshua Tree
</Life>

El mensaje transformado después de aplicar la hoja de estilo XSLT de estas muestras al mensaje XML.

Elemento <XSL>

Define una política de XSLTransform.

Valor predeterminado n/a
¿Es obligatorio? Obligatorio
Tipo Objeto complejo
Elemento principal n/a
Elementos secundarios <OutputVariable>
<Parameters>
<ResourceURL>
<Source>

El elemento <XSL> tiene los siguientes atributos:

Atributo Descripción ¿Es obligatorio? Tipo
name Nombre de la política. Solo puedes usar los siguientes caracteres en el nombre: A-Z0-9._\-$ %. Sin embargo, la interfaz de usuario de Apigee aplica restricciones adicionales, como la eliminación automática de caracteres que no sean alfanuméricos. Obligatorio Cadena

Referencia de elemento secundario

En esta sección se describen los elementos secundarios de <XSL>.

<OutputVariable>

Variable que almacena el resultado de la transformación. Deberías configurar este elemento como variable personalizada y, a continuación, usar esa variable.

Valor predeterminado n/a
¿Es obligatorio? Opcional
Tipo Cadena
Elemento principal <XSL>
Elementos secundarios Ninguno

El valor de <OutputVariable> no puede ser de tipo message, es decir, no puede ser message, request ni response.

Para sustituir el contenido del mensaje por el resultado de la transformación, elimina este elemento. Por ejemplo, si vas a transformar un mensaje a HTML, no incluyas este elemento.

<Parameters>

Añade compatibilidad con el elemento <xsl:param> en tus hojas de estilo. Define cada parámetro como un elemento secundario <Parameter> de este elemento.

Valor predeterminado n/a
¿Es obligatorio? Opcional
Tipo Matriz de elementos <Parameter>
Elemento principal <XSL>
Elementos secundarios <Parameter>

El elemento <Parameters> tiene los siguientes atributos:

Atributo Descripción ¿Es obligatorio? Tipo
ignoreUnresolvedVariables Determina si la política ignora los errores de variables sin resolver en las instrucciones del script XSLT. El valor predeterminado es false, lo que significa que, de forma predeterminada, la política generará errores si encuentra variables sin resolver. Opcional Booleano

<Parameter>

Define un parámetro en el elemento <Parameters>.

Valor predeterminado n/a
¿Es obligatorio? Opcional
Tipo Objeto complejo
Elemento principal <Parameters>
Elementos secundarios Ninguno

El elemento <Parameter> tiene los siguientes atributos:

Atributo ¿Es obligatorio? Tipo Descripción
name Obligatorio Cadena

El nombre del parámetro. Apigee compara el valor que ha definido aquí con el valor del atributo name de un elemento <xsl:param> de la hoja de estilo.

Por ejemplo, si introduce el nombre uid, su XSL podría tener un aspecto similar al siguiente:

<xsl:param name="uid" select="''"/>
ref Opcional Cadena

Apunta a una variable de contexto que contiene el valor del parámetro. Los valores de las variables de contexto ref deben definirse antes de evaluar esta política.

Por ejemplo, si un parámetro uid necesita obtener su valor de una variable llamada authn.uid, el elemento <Parameter> tendría el siguiente aspecto:

<Parameter name="uid" ref="authn.uid"/>

Si usas este atributo, no uses el atributo value.

value Opcional Cadena

Especifica un valor codificado para el parámetro. Por ejemplo, si un parámetro llamado answer debe tener el valor 42, el elemento <Parameter> sería el siguiente:

<Parameter name="answer" value="42"/>

Si usas este atributo, no uses el atributo ref.

El parámetro obtiene su valor del atributo ref o con un value explícito.

Para ver un ejemplo y obtener más información, consulta ¿Cómo se deben usar los parámetros opcionales de la política de transformación XSL?.

<ResourceURL>

El archivo XSL que usa Apigee para transformar el mensaje. El valor de este elemento es el nombre de la hoja de estilo XSL almacenada en el proxy de API en /resources/xsl.

Valor predeterminado n/a
¿Es obligatorio? Obligatorio
Tipo Cadena
Elemento principal <XSL>
Elementos secundarios Ninguno

Por ejemplo:

<ResourceURL>xsl://SubscriberNumbers-Request.xsl</ResourceURL>

Para obtener más información, consulta el artículo sobre archivos de recursos.

<Source>

Especifica el mensaje que se va a transformar. Normalmente, este valor se asigna a request o response, en función de si el mensaje que se va a transformar es entrante o saliente.

Valor predeterminado n/a
¿Es obligatorio? Opcional
Tipo Cadena
Elemento principal <XSL>
Elementos secundarios Ninguno

El archivo XSL que define la transformación se define mediante <ResourceURL>.

  • Si falta la fuente, se trata como un mensaje simple. Por ejemplo: <Source>message</Source>
  • Si no se puede resolver la variable de origen o se resuelve en un tipo que no es de mensaje, se produce un error en el paso de transformación.

Referencia de errores

Errores de tiempo de ejecución

Estos errores pueden producirse cuando se ejecuta la política.

Código de fallo Estado de HTTP Causa Solucionar
steps.xsl.XSLSourceMessageNotAvailable 500 Este error se produce si la variable de mensaje o de cadena especificada en el elemento <Source> de la política XSLTransform está fuera del ámbito (no está disponible en el flujo específico en el que se está ejecutando la política) o no se puede resolver (no está definida).
steps.xsl.XSLEvaluationFailed 500 Este error se produce si la carga útil XML de entrada no está disponible o tiene un formato incorrecto, o si la política XSLTransform falla o no puede transformar el archivo XML de entrada según las reglas de transformación proporcionadas en el archivo XSL. La política XSLTransform puede fallar por muchos motivos. El motivo del error que se indica en el mensaje de error le proporcionará más información sobre la causa.

Errores de implementación

Estos errores pueden producirse al implementar un proxy que contenga esta política.

Nombre del error Causa Solucionar
XSLEmptyResourceUrl Si el elemento <ResourceURL> de la política XSLTransform está vacío, se producirá un error en la implementación del proxy de API.
XSLInvalidResourceType Si el tipo de recurso especificado en el elemento <ResourceURL> de la política XSLTransform no es de tipo xsl, se producirá un error al desplegar el proxy de API.

Temas relacionados