2009-09-11 10 views
5

Używam wbudowanego Java XML Transformer do serializowania dokumentu XML do tekstu. Mam problem jednak, gdy jestem wyjście w trybie HTML.W jaki sposób zapobiec dodawaniu znacznika <META> za pomocą języka Java Transformer przy użyciu metody "HTML"?

Po wstawieniu elementu head wbudowany transformator decyduje się na wstawienie znacznika META z danymi typu zawartości. Nie chcę tego tagu w moich danych i nie mogę znaleźć parametru wyjściowego, który wyłączy tę funkcję. Wiem, że mógłbym zbudować arkusz stylów xslt i usunąć dany tag, ale byłoby prostsze po prostu móc ustawić parametr na transformatorze, który go wyłącza.

Możesz odpowiedzieć "ale naprawdę powinieneś mieć tę etykietkę" - uwierz mi, nie potrzebuję tego, dla dobra braw nie wejdę w to.

Przykładowy kod

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

powraca

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

Sprawa w punkcie, nie chcę tam że META tag. Jak pozbyć się tego w najprostszy możliwy sposób?

UPDATE:

Mam natknąć opcją {http://xml.apache.org/xalan}omit-meta-tag który ma robić to, co szukam. Wydaje się jednak, że jest to ignorowane.

+0

zestawu ** xml ** wartość OutputKeys.METHOD. – adatapost

+0

to musi być html dla tego, co robię – Mike

+1

To standardowe zachowanie zgodne z XSLT "[specyfikacja] (http://www.w3.org/TR/xslt#section-HTML-Output-Method) i jest wymagane przez przeglądarki, jeśli używasz kodowania innego zestawu znaków niż domyślny. –

Odpowiedz

2

Jest to sytuacja skomplikowana, ponieważ wydaje się, że "{http://xml.apache.org/xalan}omit-meta-tag" jest ignorowana we wbudowanej transformacji Javy.

Krótka odpowiedź to pobranie czegoś takiego jak xalanj i ręczne umieszczenie go w ścieżce klas.

+4

Jeśli to zrobisz, będziesz musiał upewnić się, że umieścisz go w zatwierdzonym katalogu, tak aby nadpisał wersję wbudowaną w Javę. Szczegółowe informacje można znaleźć na stronie http://java.sun.com/javase/6/docs/technotes/guides/standards/. –

4

Przymierz dodany poniżej:

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

Z Java 8 u 131,

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

wydaje się działać zgodnie z oczekiwaniami