2009-09-11 35 views
5

我使用內置的Java XML Transformer將XML文檔序列化爲文本。當我以HTML模式輸出時,我遇到了問題。如何防止使用「HTML」方法的Java XML Transformer添加<META>標記?

每當我插入一個head元素,內置變壓器決定插入一個帶有內容類型數據的META標籤。我不希望這個標籤在我的數據中,我似乎無法找到將禁用此功能的輸出參數。我知道我可以構建一個xslt樣式表並剝離標籤,但僅僅能夠在變形器上設置一個禁用它的參數會更簡單。

你可能會回答「但你真的應該有這個標籤」 - 相信我,我不需要它,爲了不少的利益,我不會進入它。

示例代碼

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

回報

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

典型的例子,我不希望這樣META標籤存在。我如何以最簡單的方式擺脫它?

UPDATE:

我經歷了這是應該做的事情我正在尋找的選項{http://xml.apache.org/xalan}omit-meta-tag運行。然而它似乎被忽略了。

+0

組工作** ** XML的OutputKeys.METHOD價值。 – adatapost 2009-09-11 05:23:14

+0

它需要是我在做什麼的HTML – Mike 2009-09-11 05:23:37

+1

這是根據XSLT'[規格](http://www.w3.org/TR/xslt#section-HTML-Output-Method)的標準行爲,它是必需的如果您使用其他字符集編碼比默認瀏覽器。 – 2011-03-24 04:36:54

回答

2

這是一個複雜的情況,因爲在內置的java變換中,"{http://xml.apache.org/xalan}omit-meta-tag"被忽略。

所以最簡單的答案是下載類似xalanj的東西,並手動將它放入類路徑中。

+4

如果你這樣做了,你必須確保你把它放在背書目錄中,這樣它才能覆蓋內置到Java的版本。有關詳細信息,請參閱http://java.sun.com/javase/6/docs/technotes/guides/standards/。 – 2009-09-13 06:55:11

4

試試下面補充說:

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

與Java 8ü131,

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

似乎預期

相關問題