8
votes

Erreur de transformateur Java: impossible de compiler la feuille de style

Je veux transformer un XML avec XSLT en Java. Pour cela, j'utilise le javax.xml.transform package. Cependant, je reçois l'exception javax.xml.transform.transformerConfigurationException: impossible de compiler stylesheet . C'est le code que j'utilise: xxx

Notez que j'ai marqué la ligne qui jette l'exception.

Lorsque je saisi la méthode, la valeur de Xsltrule est-ce: xxx


4 commentaires

Quelle exception as-tu attrapé?


Il est javax.xml.transform.transformerConfigurationException . J'ai édité mon post original, c'est là maintenant.


Pourquoi votre dernier modèle est vide?


Parce que cet élément doit être supprimé. Il trouve l'élément, mais ne le copie pas. Ce XSLT devrait fonctionner, je l'ai déjà utilisé pendant que je travaillais dans .NET.


3 Réponses :


10
votes

Le Constructeur

ByteArrayOutputStream baos = new ByteArrayOutputStream();
Result result = new StreamResult(baos);
transformer.transform(xmlInput, result);
return baos.toString();


5 commentaires

Alternativement, changez simplement Nouveau StreamSource (Xsltrule) TO Nouveau StreamSource (New StringReader (Xsltrule))


Merci beaucoup! Mais j'ai toujours un problème avec le résultat du résultat = nouveau streamressionult (); . Ce qu'il faut y faire?


@IVan: Quel problème avez-vous avec le résultat de résultat = nouveau streamression (); ?


@Michael pour la ligne transformer.transform i Obtenir cette exception: javax.xml.transform.transformerexception: objet de résultat transmis à '' {0} 'est invalide. i a fait la même chose pour la variable XML que pour Xsltrule.


@Ivan: Je vois: J'ai modifié ma réponse pour résoudre ce problème aussi.



1
votes

Vous devrez construire un flux de la chaîne XSLT que vous avez, puis l'utiliser comme source de flux xxx pré>

pour obtenir le résultat à une chaîne: p>

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    Result result = new StreamResult(bos);
    transformer.transform(xmlInput, result);
    String s = new String(bos.toByteArray());
    System.out.println(s);


1 commentaires

Merci beaucoup! Mais j'ai toujours un problème avec le résultat du résultat = nouveau streamressionult (); . Ce qu'il faut y faire?



0
votes

Pour utiliser XSLTC, mettre xalan.jar (2.5), Serializer.jar, XML-Apis.jar et Xercesimpl.jar sur votre path de classe.


1 commentaires

Ne fais pas ça. Tous ces forfaits (du projet XERSES) ont été abandonnés depuis 2010. Le code vit désormais dans la JVM.