如何让Transformer不删除?

时间:2015-07-14 14:01:11

标签: java xml

当我通过javax.xml.transform.Transformer传递HTML5代码时,<!DOCTYPE html> doctype会被删除。以下是示例代码:

public static void main(String[] args) {
    StreamSource source = new StreamSource(
        IOUtils.toInputStream(
            Joiner.on('\n').join(
                "<!DOCTYPE html>",
                "<html>",
                "<head>",
                "</head>",
                "<body>",
                "</body>",
                "</html>"
            )
        )
    );
    ByteArrayOutputStream result = new ByteArrayOutputStream();
    try {
        Transformer transformer = TransformerFactory
            .newInstance()
            .newTransformer();
        transformer.transform(source, new StreamResult(result));
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    System.out.println(
       result.toString()
    );
}

输出是:

<html>

<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">

</head>

<body>

</body>

</html>

如何保存<!DOCTYPE html>

1 个答案:

答案 0 :(得分:1)

DOCTYPE声明不是数据模型的一部分,因此XSLT转换器不知道它在那里,所以它不能保留它。此外,当XSLT 1.0(甚至2.0)被标准化时,语法<!DOCTYPE html>并不存在,因此甚至没有标准的生成方法。但请参阅Set HTML5 doctype with XSLT了解变通方法。