2010-10-07 15 views
2

Je crée des xslt en utilisant Umbraco 4.5.2 et je veux ajouter la fonction de set: distinct de EXSLT.org (http://www.exslt.org/set/functions/ distincte/index.html) cependant, quand je référence l'ensemble: distincte je reçois l'erreur:Les ensembles Umbraco et EXSLT ne fonctionnent pas

System.Xml.Xsl.XslTransformException: Cannot find a script or an extension object associated with namespace 'http://exslt.org/sets'.

J'ai ajouté les fichiers, l'extension de l'espace de noms et xslt comme ceci:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]> 
<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxml="urn:schemas-microsoft-com:xslt" 
    xmlns:exsl="http://exslt.org/functions" 
    xmlns:set="http://exslt.org/sets" 
    xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" 
    exclude-result-prefixes="exsl msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets "> 
<xsl:import href="set.xsl" /> 

Est-ce que c'est moi qui manque quelque chose ou est-ce Umbraco qui jette l'erreur ou est-ce qu'une erreur réseau sous-jacente se produit quelque part (et si oui, comment puis-je d out)?

TIA!

+0

Bonne question (+1). Voir ma réponse pour l'explication et les solutions possibles. –

Répondre

0

Le framework Umbraco inclut déjà l'implémentation Exslt.Sets, vous n'avez donc pas besoin d'ajouter une référence supplémentaire comme ci-dessus. Vous pouvez voir la référence à la mise en œuvre Umbraco dans votre code ci-dessus, il ressemble à ceci:

xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" 

Retirez les lignes:

xmlns:exsl="http://exslt.org/functions" 
xmlns:set="http://exslt.org/sets" 

et utiliser Exslt.ExsltSets: distinct().

+0

Merci; les extensions où en effet déjà là! – riffnl

1

EXSLT n'est pas implémenté de manière native par les deux processeurs .NET XSLT: XslCompiledTransform et (obsolète) XslTransform.

Il existe des implémentations tierces d'EXSLT pour .NET telles que celle du projet MVPXML. Vous devez l'obtenir à partir de here et l'installer sur le système qui exécute la transformation XSLT.

Vous pouvez également utiliser toujours le XSLT pur 1.0 Muenchian method for grouping (il y a beaucoup, beaucoup de questions dans la balise xslt des réponses qui démontrent le regroupement Muenchian) et cela est préférable dans le cas où votre code xslt doit être portable afin de fonctionner avec autant de processeurs compatibles XSLT 1.0 que possible.

+0

+1 Pour pointer la solution standar XSLT: méthode Muechian. –