2009-09-11 16 views
5

Estoy usando el Java XML Transformer incorporado para serializar un documento XML en texto. Sin embargo, tengo un problema cuando estoy generando en modo HTML.¿Cómo evito que Java XML Transformer utilizando el método "HTML" agregue la etiqueta <META>?

Cada vez que inserte un elemento head, el transformador incorporado decide insertar una etiqueta META con datos de tipo de contenido. No quiero esta etiqueta dentro de mis datos y parece que no puedo encontrar un parámetro de salida que deshabilite esta característica. Sé que podría construir una hoja de estilo xslt y quitar la etiqueta en cuestión, pero sería más simple simplemente poder establecer un parámetro en el propio transformador que lo desactive.

Puedes responder con "pero realmente deberías tener esta etiqueta" - créeme, no la necesito, por las buenas noticias no entraré en ella.

Código de ejemplo

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); 

vuelve

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

ejemplo de ello, no quiero que META etiqueta allí. ¿Cómo me deshago de él de la manera más fácil posible?

ACTUALIZACIÓN:

me he encontrado a través de la opción {http://xml.apache.org/xalan}omit-meta-tag que se supone que debe hacer lo que estoy buscando. Sin embargo, parece como si lo estuvieran ignorando.

+0

** ** xml valor de OutputKeys.METHOD. – adatapost

+0

necesita ser html para lo que estoy haciendo – Mike

+1

Ese es el comportamiento estándar de acuerdo con XSLT '[especificaciones] (http://www.w3.org/TR/xslt#section-HTML-Output-Method) y es requerido por navegadores si usa otro conjunto de caracteres codificado por defecto. –

Respuesta

2

Esta es una situación complicada, ya que parece que "{http://xml.apache.org/xalan}omit-meta-tag" se ignora en la transformación incorporada de Java.

Así que la respuesta breve es descargar algo como xalanj y ponerlo en su ruta de clases manualmente.

+4

Si hace eso, deberá asegurarse de colocarlo en el directorio endosado, de forma que anule la versión incorporada en Java. Ver http://java.sun.com/javase/6/docs/technotes/guides/standards/ para más detalles. –

4

Trate añade a continuación:

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

Con Java 8 u 131,

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

parece funcionar como se esperaba conjunto

Cuestiones relacionadas