2010-06-14 3 views
1

Je suis nouveau à XSL, et donc nouveau à l'aide de scripts dans le XSL.message d'erreur L'URI n'identifie pas une classe Java externe

J'ai pris un exemple de code (en utilisant aussi C#) et l'ai adapté pour mon propre usage .. mais cela ne fonctionne pas.

EDIT: Ce code fonctionne dans Visual Studio .. L'erreur est uniquement générée dans Oxygen ... Je veux toujours l'avoir sans erreur dans Oxygen, donc toute idée est appréciée!

Le message d'erreur est: L'urne URI: cs-scripts ne permettent pas d'identifier une classe Java externe

Le code approprié que j'ai est:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" 
xmlns:tok="urn:cs-scripts"> 

... 
... 
... 
</xsl:template> 


<xsl:variable name="temp"> 
    <xsl:value-of select="tok:getList('AAA BBB CCC', ' ')"/> 
</xsl:variable> 

<msxsl:script language="C#" implements-prefix="tok"> 
    <![CDATA[ 
    public string[] getList(string str, char[] delim) 
    { 
    return str.Split(delim, StringSplitOptions.None); 
    } 

    public string getString(string[] list, int i) 
    { 
    return list[i]; 
    } 
    ]]> 
</msxsl:script> 


</xsl:stylesheet> 
+0

Bonne question (+1). Voir ma réponse décrivant une solution XSLT pure. –

Répondre

4

La déclaration

xmlns:tok="urn:cs-script" 

fait référence à une fonction créée en C# dans votre XSLT. Oxygen est créé dans Java et ne peut donc pas charger/compiler la fonction de rappel générée par C#.

Si vous souhaitez supprimer l'erreur dans Oxygen, supprimez la fonction de rappel spécifique C# (qui ne fonctionnera que dans un environnement .Net).

+0

@Svenson: hmm .. donc je ne peux pas utiliser C#. Et je dois utiliser Java? aucun autre script ne fonctionnerait? javascript? php? etc.? – developer

+0

Si vous exécutez le XSLT dans .Net, vous pouvez l'utiliser (et ignorer simplement l'erreur Oxygen). Si vous utilisez le xslt dans un autre environnement, vous ne pouvez pas l'utiliser. Vous devrez créer des fonctions XSLT pures sans rappel à une exécution externe. –

2

Vous n'avez pas besoin d'une fonction d'extension pour diviser une chaîne en mots. Utilisez le modèle FXSL 1.x str-split-to-words comme décrit here.

Parce FXSL est écrit en XSLT, il fonctionne avec tous les processeurs XSLT 2.0 et 1.x XSLT - avec MSXML ou tout processeur qui prend en charge l'extension EXSLT node-set() (également soutenu par XslCompiledTransform dans .NET).

+0

Actuellement, j'utilise actuellement une solution récursive dans xsl, mais ce que je dois accomplir deviendra encore plus complexe, et il était plus propre d'ajouter la fonction d'extension. J'ai quelques autres choses que je veux faire avec C#, donc je vais devoir passer à Visual Studio pour ces fichiers (même si Oxygen est beaucoup plus agréable à utiliser pour xsl ..: S) Mais merci pour votre réponse! Toujours l'apprécier :) – developer

Questions connexes