通过简单的代码解析和重写简单的xml,一些奇怪的事情发生在这个
INPUT:
<html>
<input></input>
</html>
给出OUTPUT(格式不正确):
<html>
<input>
</html>
&p;同样的事情发生在&lt;输入/&gt;,或&lt; br /&gt;。
它不会发生在&lt; html2&gt;,与其他标签,...
代码是经典的:
// 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();
这是一个已知的错误?
答案 0 :(得分:3)
XSLT定义output method,可以是xml
,html
或text
。
规范说如果根节点是html
,则默认输出方法应该是<html>
,否则它应该是xml
。
使用xml
方法,您将获得<input/>
。
使用html
方法,您将获得<input>
,,因为HTML specification表示。
如果需要,您可以明确地给出输出方法:
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
因此,具有<html>
根节点的文档将输出XML,即<input/>
。
<强>行情强>
method
属性的默认值选择如下。如果
- 结果树的根节点有一个元素子
- 结果树的根节点(即文档元素)的第一个元素子元素的扩展名称具有本地部分
html
(在大小写的任意组合中) )和空名称空间URI,以及- 结果树根节点的第一个元素子元素之前的任何文本节点只包含空格字符,
然后默认输出方法为
html
;否则,默认输出方法为xml
。如果没有xsl:output
个元素,或者xsl:output
个元素都没有指定method
属性的值,则应使用默认输出方法。
某些HTML元素类型没有内容。例如,换行元素
BR
没有内容;它唯一的作用是终止一行文字。 此类空元素永远不会有结束标记。文档类型定义和规范文本指示元素类型是空的(没有内容),或者如果它可以包含内容,则表示什么是合法内容。