java - StAX 结束元素标记为 "<element attributes../>"而不是整个结束标记 </element>

标签 java stax

我正在流式传输XML文档,以下是示例代码。

final XMLOutputFactory xof =  XMLOutputFactory.newInstance();
final ByteArrayOutputStream os = new ByteArrayOutputStream();
final XMLStreamWriter xtw = xof.createXMLStreamWriter(os);
xtw.writeStartDocument("utf-8", "1.0");
xtw.writeStartElement("Buddy");
xtw.writeAttribute("Name", "AB");
xtw.writeAttribute("Age", "25");
xtw.writeAttribute("petName", "XX");
xtw.writeEndElement();
xtw.close();

这会产生

<?xml version="1.0" encoding="utf-8"?><Buddy Name="AB" Age="25" petName="XX"></Buddy>

如何让 StAX 写入

<?xml version="1.0" encoding="utf-8"?><Buddy Name="AB" Age="25" petName="XX"/>

即结束标记“”不是必需的,它应该在写入属性后立即结束标记。有什么想法吗?

意图:最大限度地减少通过网络发送的字节数。每秒大约 15k 条消息。因此,每条消息值得节省一些字节。

最佳答案

您应该使用 writeEmptyElement(...) 为此:

xtw.writeStartDocument("utf-8", "1.0");
xtw.writeEmptyElement("Buddy");
xtw.writeAttribute("Name", "AB");
xtw.writeAttribute("Age", "25");
xtw.writeAttribute("petName", "XX");
xtw.writeEndDocument();

空元素不需要 writeEndElement()

关于java - StAX 结束元素标记为 "<element attributes../>"而不是整个结束标记 </element>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17489791/

相关文章:

java - 用于创建引用文件的 xml 或普通文件

java - 使用 javax 包装器的 XML 自定义 StAX 解析器

java - 异常不会影响方法声明吗?

java - StAX 不检索属性的数据

java - StAX 事件过滤器 StackOverflowError

java - 有没有一种很好的方法可以在不将整数转换为字符串的情况下用零填充整数?

java - 我们如何自定义 STAX 或 SAX 的 XML 解析错误?

Java 方法引用抛出 NPE

java - 如何知道 Swing 中两个线程何时完成

java - 在添加到两个暗列表之前,使用 java 中的 contains 来检查重复项