【发布时间】:2012-05-23 19:59:57
【问题描述】:
我有这个代码:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
DOMImplementation impl = builder.getDOMImplementation();
Document xmldoc = impl.createDocument(null, null, null);
Element root = xmldoc.createElement("root");
Element textElement = xmldoc.createElement("text");
Text textNode = xmldoc.createTextNode("");
root.appendChild(textElement);
textElement.appendChild(textNode);
OutputFormat of = new OutputFormat("XML","UTF-8",true);
of.setIndent(1);
of.setIndenting(true);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
XMLSerializer serializer = new XMLSerializer(stream, of);
// As a DOM Serializer
serializer.asDOMSerializer();
serializer.serialize(root);
System.out.println(stream.toString());
我得安慰一下:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<text/>
</root>
但是,我想得到这个:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<text></text>
</root>
有谁知道,如何设置 XMLSerializer 以避免复杂的空元素? 谢谢。
【问题讨论】:
-
我认为你无法改变这一点。这两个版本是等效的。为什么要避免复杂的空元素?
-
我的应用程序是两个应用程序之间的一种转换器,它将应用程序1生成的文件解析为一个xml文件,该文件作为应用程序2的输入。但是应用程序2不接受这种的输入。是否有可能通过 doctype 或 st 这样设置?
-
从语言定义的角度来看,两个版本是等效的,因此在 DTD 或 XSD 中没有构造来防止使用空标签。我的意见是你应该让 app2 接受输入(因为它是一个有效的输入,所以它应该被处理)或者如果你不能访问那个应用程序,你可以改变 app1 返回的 xml 字符串(stream.toString ())。更准确地说,您应该在字符串中查找所有“
”模式并将它们替换为“ ”。我的观点是,为了软件的稳定性,你应该让app2接受空元素的输入 -
不接受
<tag/>的应用不能声称读取XML。
标签: java xmlserializer