Java 变压器厂腐败<;输入>;及<;br>;内部标签<;html>;标签

Java 变压器厂腐败<;输入>;及<;br>;内部标签<;html>;标签,java,xml,parsing,Java,Xml,Parsing,通过简单的代码解析和重写简单的xml,会发生一些奇怪的事情 输入: <html> <input></input> </html> 它是一个已知的bug吗?XSLT定义了一个,它可以是xml、html或文本 规范规定,如果根节点是,则默认输出方法应该是html,否则应该是xml 使用xml方法,您将获得 使用html方法,您将得到,因为 如果需要,可以显式提供输出方法: transformer.setOutputProperty(OutputKey

通过简单的代码解析和重写简单的xml,会发生一些奇怪的事情

输入:

<html>
<input></input>
</html>
它是一个已知的bug吗?

XSLT定义了一个,它可以是
xml
html
文本

规范规定,如果根节点是
,则默认输出方法应该是
html
,否则应该是
xml

使用
xml
方法,您将获得

使用
html
方法,您将得到
,因为

如果需要,可以显式提供输出方法:

transformer.setOutputProperty(OutputKeys.METHOD, "xml");
因此,具有
根节点的文档将输出XML,即

引号

:

方法
属性的默认值选择如下。如果

  • 结果树的根节点有一个子元素
  • 结果树的根节点(即文档元素)的第一个子元素的扩展名具有本地部分
    html
    (大写和小写的任意组合)和空名称空间URI,并且
  • 结果树根节点的第一个子元素之前的任何文本节点仅包含空格字符
那么默认的输出方法是
html
;否则,默认的输出方法是
xml
。如果没有
xsl:output
元素,或者如果没有
xsl:output
元素指定
method
属性的值,则应使用默认的输出方法

:

某些HTML元素类型没有内容。例如,换行元素
BR
没有内容;它唯一的作用是终止一行文本此类空元素从来没有结束标记。文档类型定义和规范的文本指示元素类型是空的(没有内容),或者,如果它可以有内容,什么是合法内容


我立刻想到了自动关闭的html标签。。。
// READ XML
DocumentBuilderFactory builderFactory =DocumentBuilderFactory.newInstance();
builderFactory.setNamespaceAware(true);
DocumentBuilder builder = builderFactory.newDocumentBuilder();

// PARSE
Document document = builder.parse(new InputSource(new StringReader(_xml_source)));

// WRITE XML

TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
StringWriter buffer = new StringWriter();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(document), new StreamResult(buffer));
String output = buffer.toString();
transformer.setOutputProperty(OutputKeys.METHOD, "xml");