java XMLSerializer 避免复杂的空元素 [英] java XMLSerializer avoid Complex Empty Elements

查看:27
本文介绍了java XMLSerializer 避免复杂的空元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个代码:

    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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆