2009-09-11 36 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"); 

似乎预期

相关问题