java XMLSerializer 避免复杂的空元素 [英] java XMLSerializer avoid Complex Empty Elements
问题描述
我有这个代码:
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 以避免复杂的空元素吗?谢谢.
Does anybody know, how to set the XMLSerializer to avoid Complex Empty Elements? Thanks.
推荐答案
我遇到了与 XMLSerializer 相同的问题,不允许渲染自定义空标签.我的解决方案是扩展原始 XMLSerializer 代码并覆盖 serializeElement 方法:
I had the same problem with XMLSerializer not allowing rendering customization of empty tags. My solution was to extend the original XMLSerializer code and override the serializeElement method:
我已经复制了原始代码并更改了关闭打印部分:
I have copied the original code and changed the closing printing part:
protected void serializeElement(Element elem) 抛出 IOException...
if (isSelfClosingElement(elem))
_printer.printText("/>");
else
_printer.printText("></" + elem.getTagName() + ">");
其中 isSelfClosingElement 包含自闭合元素列表
where isSelfClosingElement holds a list of self closing elements
注意:另外,您需要复制 printAttribute() 和 printNamespaceAttr() 方法,因为它被标记为私有而不是受保护.
NOTE: additionally you need to copy the printAttribute() and printNamespaceAttr() method as it is marked private instead of protected.
这篇关于java XMLSerializer 避免复杂的空元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!