2010-03-11 19 views
13

¿Hay una función de codificación URL en XSLT versión 1? Necesito algo similar a la función encodeURIComponent en javascript?XSLT versión 1 Codificación URL

Al ver que esto no es posible ya que estoy usando la plataforma .NET como XSLT se aplica a una página Sharepoint. ¿Hay una manera de codificar esta compra llamando a la función de codificación javascript dentro del XML, siguiente fragmento:

<xsl:template name="BuildLink"> 
    <xsl:param name="PrimarySubject" /> 
    <xsl:text>?PrimarySubject=</xsl:text> 
    <xsl:value-of select="$PrimarySubject" /> 
</xsl:template> 

Gracias,

Respuesta

12

puede utilizar JScript incrustado en XSLT ...

<msxsl:script language="JScript" implements-prefix="custom"> 
function uriencode(string) { 
return encodeURIComponent(string); 
} 
</msxsl:script> 

y llamarlo como custom:uriencode(url_to_encode)

primer lugar, tendrá que definir el espacio de nombres, aunque añadiendo a la etiqueta de la <xsl:stylesheet ... xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:custom="http://youdomain.ext/custom"

[actualizar]

la Url puse para el espacio de nombres personalizado podría ser cualquier cosa .. .. it is just a unique identifier
(el enlace llega a la conclusión de que es menos confuso si no se utiliza un URL como el identificador ..)

[udpdate 2]

Alguna información agregada.
Si utiliza MSXML6 entonces usted necesita para permitir manualmente secuencias de comandos en el XSLT, mediante el uso de la propiedad AllowXsltScript .. (reference)
Dependiendo de la forma de cargar el XSLT y su configuración echar un vistazo a los ejemplos de cómo en Script Blocks Using msxsl:script a alow guiones

+0

llamar como provoca un error no es esto de la manera correcta para llamarlo? – van

+0

intente llamarlo con '' –

+0

cadena utilizada pero aún no hay dados ... – van

1

No hay una sola. XSLT no tiene conocimiento de URL y HTML.

Según el idioma y la plataforma que esté utilizando, es posible que pueda utilizar un XSLT extension que sí lo hace.

1

En determinadas circunstancias, puede utilizar EXSLT (extensiones proporcionadas por el analizador): Dave Pawson's XSLT FAQ en este caso.

Sin embargo, XSLT es Turing completo, por lo que podría escribir un codificador de URL básico en XSLT, teóricamente (no lo intentaría).

7

Estos XSLT 1.0 stylesheets se puede utilizar para llevar a cabo el URL de codificación/decodificación:

  1. url-decode.xsl
  2. url-encode.xsl

Descripción: Sólo un subconjunto muy pequeño de caracteres ASCII puede decir con seguridad incrustado en un URI.Los caracteres que se encuentran fuera de deben escaparse utilizando denominada "codificación URL" o "% -escaping". Los caracteres son convertidos a bytes de acuerdo con alguna codificación (ASCII si es posible) y esos bytes están escritos como '%' seguidos de 2 dígitos hexadecimales. La codificación utilizada como base para esta conversión de puede ser cualquier cosa, pero tiende a a ser dictada por el contexto en el que se está utilizando el URI . Los estándares futuros recientes y usan UTF-8, pero las aplicaciones heredadas que incluyen muchos ampliamente desplegados, procesadores del lado del servidor de datos de formularios HTML suponen ISO-8859-1.

Por ejemplo, el saludo "¡Hola, César!" se puede incrustar en un URI si se escribe de la siguiente manera: % A1Hola% 2C% 20C% E9sar !. (... suponiendo que ISO-8859-1 como base para la codificación. Si estuviera basado en UTF-8, entonces sería ser% C2% A1Hola% 2C% 20C% C3% A9sar!).

La demo de URL-encode.xsl codifica una cadena arbitraria pasada como un parámetro llamado iso-string. Asume que ISO-8859-1 será la base para la codificación URL . Debe ser compatible con cualquier procesador XSLT 1.0.

Decodificación de una cadena basada en ISO-8859-1 La cadena codificada en URL utiliza una técnica similar . Ver url-decode.xsl para una demostración . Su parámetro url es la cadena a decodificar.

+0

Desafortunadamente, esta no es una solución universal ya que esas hojas de estilo están limitadas a Latin1 y no traducen todo el conjunto de caracteres Unicode. – dolmen