2009-09-11 7 views
5

J'utilise Java XML Transformer intégré pour sérialiser un document XML en texte. J'ai un problème cependant quand je produis en mode HTML.Comment empêcher Java XML Transformer utilisant la méthode "HTML" d'ajouter une balise <META>?

Chaque fois que j'insère un élément head, le transformateur intégré décide d'insérer une variable META avec des données de type contenu. Je ne veux pas cette balise dans mes données et je n'arrive pas à trouver un paramètre de sortie qui désactivera cette fonctionnalité. Je sais que je pourrais construire une feuille de style xslt et enlever la balise en question, mais il serait plus simple de pouvoir définir un paramètre sur le transformateur lui-même qui le désactive.

Vous pourriez répondre avec "mais vous devriez vraiment avoir cette étiquette" - croyez-moi, je n'en ai pas besoin, par souci de brièveté je n'entrerai pas dedans.

Exemple de code

Document d; 
//d = <html><head><title></title></head><body></body></html> 

Transformer t; //properly inited with no xslt specified 

t.setOutputProperty(OutputKeys.METHOD,"html"); 
t.setOutputProperty(OutputKeys.INDENT,"no"); 
t.transform(new DOMSource(d), result); 

System.out.println(result); 

retours

<html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><title></title><style type="text/css"></style></head><body></body></html> 

cas au point, je ne veux pas qu'il y ait étiquette META. Comment puis-je m'en débarrasser le plus facilement possible?

MISE À JOUR:

J'ai couru à travers l'option {http://xml.apache.org/xalan}omit-meta-tag qui est censé faire ce que je cherche. Cependant, il semble que ce soit ignoré.

+0

set ** xml ** Valeur de OutputKeys.METHOD. – adatapost

+0

il doit être html pour ce que je fais – Mike

+1

C'est le comportement standard selon XSLT '[specs] (http://www.w3.org/TR/xslt#section-HTML-Output-Method) et il est requis par navigateurs si vous utilisez un autre jeu de caractères que le jeu par défaut. –

Répondre

2

Ceci est une situation compliquée, car il semble que le "{http://xml.apache.org/xalan}omit-meta-tag" est ignoré dans la transformée Java intégrée. Donc, la réponse courte est de télécharger quelque chose comme xalanj et de le placer manuellement dans votre classpath.

+4

Si vous faites cela, vous devrez vous assurer que vous le mettez dans le répertoire approuvé, de sorte qu'il remplace la version intégrée à Java. Voir http://java.sun.com/javase/6/docs/technotes/guides/standards/ pour plus de détails. –

4

Essayez d'ajouter ci-dessous:

trans.setOutputProperty(OutputKeys.METHOD, "xml"); 
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 
0

Avec Java 8 u 131,

transformer.setOutputProperty("{http://xml.apache.org/xalan}omit-meta-tag", "yes"); 

semble fonctionner comme prévu

Questions connexes