2013-09-07 2 views

Répondre

3

Veuillez regarder la méthode register_function() dans XML::LibXSLT. La documentation XML::LibXSLT a un petit exemple comment enregistrer une petite fonction perl à utiliser dans une feuille de style XSLT. De l'expérience personnelle, il n'y a aucun problème à définir aussi des fonctions plus importantes ici.

+0

C'est une fonctionnalité intéressante, mais cela vaut la peine de répéter que c'est une fonctionnalité spécifique à l'implémentation. – amon

+1

La spécification XSLT mentionne et autorise [extensions] (http://www.w3.org/TR/xslt#extension) dans le langage xslt. Et bien sûr, c'est spécifique à la mise en œuvre; une implémentation de python xslt est peu susceptible de supporter le code Perl. Si votre objectif est la portabilité, n'utilisez pas cette fonctionnalité. Sinon, je ne connais aucun obstacle pour utiliser cette fonctionnalité. –

+0

Merci pour votre réponse. Je n'ai pas affaire à des navigateurs. Le XSL que j'écris est de générer du XML à envoyer à une base de données. Rien de ce que je travaille ne va au-delà du système de gestion de contenu en dehors du XML. Le CMS capture les informations de l'espace de travail de l'utilisateur et les données de l'utilisateur, en utilisant perl, nous pouvons capturer ces informations et les envoyer en tant que métadonnées dans le fichier XML. Cependant, à moins que XSL ne puisse saisir de telles informations, l'utilisation de fonctions perl intégrées est la solution. Merci encore @SlavenRezic! –

0

Cela n'a aucun sens. Lier une feuille de style XSLT à des commandes externes annulerait toute portabilité, en particulier pour les navigateurs.

Des processeurs XSLT spécifiques pourraient permettre l'écriture de scripts¹, mais ils ne seront généralement pas disponibles. Le XSLT specification ne contient pas quoi que ce soit liés à l'appel de commandes externes. La spécification indique comment les extensions de la langue sont gérées, ce qui permet aux fournisseurs d'inclure des supports pour l'écriture de scripts ou l'appel de commandes externes.

Si votre problème ne peut pas être résolu dans le langage XSLT (Turing-complete), il se peut que ce soit le mauvais outil pour votre travail. Réécrire certaines parties en Python ou Perl peut être plus approprié.

1. Une implémentation Microsoft vous permet de définir des fonctions supplémentaires en JavaScript.

+0

Mon objectif est d'ajouter des chemins de données à partir d'un modèle d'acquisition de données à partir d'un système de gestion de contenu. Auparavant, nous utilisions Perl pour générer les modèles, de sorte que l'écriture des fonctions était standard. Nous passons à XSL, j'essaie de trouver un moyen de tirer parti de ces données, car ce ne sera pas un contenu défini par l'utilisateur. –

+1

@AndersonNicholasL Vous pouvez traiter plusieurs documents d'entrée, qui peuvent être référencés par des URI. Si l'autre contenu est statique, c'est trivial (juste vider le XML supplémentaire dans un fichier, et être fait avec lui). Sinon, vous pourriez en quelque sorte lier un script à une URL spécifique, par ex. grâce à CGI - mais ce serait un modèle très discutable. – amon

+0

@amon S'il vous plaît voir ma réponse. Il est parfaitement possible d'enregistrer des fonctions externes pour xslt. –