如何防止Java XML Transformer使用“HTML”方法添加<META>标签?

6
我正在使用内置的Java XML转换器将XML文档序列化为文本。但是,当我以HTML模式输出时,遇到了问题。
每当我插入一个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标签。最简单的方法是如何摆脱它?

更新:

我发现了一个选项{http://xml.apache.org/xalan}omit-meta-tag,据说可以实现我想要的效果。但是似乎被忽略了。


设置OutputKeys.METHOD的xml值。 - KV Prajapati
2
它需要是HTML,适合我正在进行的操作。 - Mike
1
这是根据XSLT规范的标准行为,并且如果您使用除默认字符集编码之外的其他字符集编码,则浏览器需要这样做。 - user357812
2个回答

6

请尝试添加以下内容:

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

4

这是一个复杂的情况,因为似乎内置的java转换忽略了"{http://xml.apache.org/xalan}omit-meta-tag"

因此,简短的答案是下载类似xalanj的东西并手动将其放入您的类路径中。


5
如果你这样做,你需要确保将它放入认可的目录中,以便覆盖内置于Java中的版本。有关详细信息,请参见http://java.sun.com/javase/6/docs/technotes/guides/standards/。 - Dominic Mitchell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接