2010-03-11 8 views
13

Existe-t-il une fonction de codage d'URL dans la version 1 de XSLT? J'ai besoin de quelque chose de similaire à la fonction encodeURIComponent en javascript?XSLT version 1 Codage d'URL

Voyant que ce n'est pas possible car j'utilise la plate-forme .NET que le XSLT est appliqué à une page Sharepoint. Est-il possible de coder cet achat d'appeler la fonction javascript encode dans le XML, extrait de code ci-dessous:

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

Merci,

Répondre

12

vous pouvez utiliser JScript intégré dans XSLT ...

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

et l'appeler comme custom:uriencode(url_to_encode)

Vous devez d'abord définir l'espace de noms mais en ajoutant à la balise <xsl:stylesheet ... la xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:custom="http://youdomain.ext/custom"

[mise à jour]

l'URL je mets pour l'espace de noms personnalisé pourrait être quelque chose .. it is just a unique identifier ..
(le lien conclut qu'il est moins confus si vous n'utilisez pas une URL comme identifiant ..)

[udpdate 2]

Quelques informations supplémentaires.
Si vous utilisez MSXML6 alors vous devez autoriser manuellement les scripts dans le XSLT, en utilisant la propriété AllowXsltScript .. (reference)
Selon la façon dont vous chargez le xslt et ses paramètres ont un regard sur les exemples à Script Blocks Using msxsl:script sur la façon à alow scripts

+0

appeler comme provoque une erreur est-ce pas la bonne façon de l'appeler? – van

+0

essayez de l'appeler avec '' –

+0

utilisé chaîne mais toujours pas de dés ... – van

1

Il n'y a pas un. XSLT n'a aucune connaissance des URL et HTML. Selon la langue et la plate-forme que vous utilisez, vous pouvez utiliser un XSLT extension qui fait cela.

1

Vous pouvez, dans certaines circonstances, utiliser EXSLT (extensions fournies par l'analyseur): Dave Pawson's XSLT FAQ sur celui-ci. Cependant, XSLT est complet à Turing, donc vous pouvez écrire un encodeur d'URL de base dans XSLT lui-même, théoriquement (je n'essaierais pas).

7

Ces XSLT 1.0 stylesheets peuvent être utilisés pour effectuer encode URL/décodage:

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

Description: Seul un sous-ensemble très petit de caractères ASCII peut être en toute sécurité incorporé dans un URI.Caractères en dehors de cet ensemble doit être échappé en utilisant ce que l'on appelle "URL encoding" ou "% -escaping". Les caractères sont convertis en octets selon un codage (ASCII si possible) et ceux octets sont écrits chacun en '%' suivi de 2 chiffres hexadécimaux. Le codage utilisé comme base pour cette conversion peut être n'importe quoi, mais tend pour être dicté par le contexte dans lequel l'URI est utilisé. Récentes et futures normes utilisent UTF-8, mais les anciennes applications , y compris beaucoup largement déployés, côté serveur processeurs de données de formulaire HTML supposent ISO-8859-1.

Par exemple, le message d'accueil "¡Hola, César!" peut être intégré dans une URI si est écrit comme suit: % A1Hola% 2C% 20C% E9sar !. (... en supposant que ISO-8859-1 comme base pour l'encodage Si elle était basée sur UTF-8, alors soit% C2% A1Hola% 2C% 20C% C3% A9sar!). L'URL de démo url-encodage.xsl code une chaîne arbitraire transmise en tant que paramètre nommé iso-string. Il suppose que ISO-8859-1 sera la base du codage d'URL . Il devrait être compatible avec n'importe quel processeur XSLT 1.0.

Le décodage d'une chaîne codée en URL ISO-8859-1 utilise une technique similaire. Voir url-decode.xsl pour une démo . Son paramètre url est la chaîne à décoder.

+0

Malheureusement, cette solution n'est pas universelle car ces feuilles de style sont limitées à Latin1 et ne traduisent pas tout le jeu de caractères Unicode. – dolmen