我正在使用xml编写器进行格式转换。我决定使用StAX API(准确的游标API),因为流功能(输入文件非常大,需要逐段编写)。我使用数据格式(某些类)来存储输入文件中的解析值。我还创建了一些用于编写xml文件的类,它们具有writeNode方法。此方法如下所示:
public void writeNode(Object object){
writer.writeStartElement();
... some writeNode calls of the children nodes
writer.writeEndElement();
}
名称为“writer”的对象是StAXStreamWriter类的实例。 我的问题是,有时这些子节点是空的。在这些情况下,根本不应写入父节点。现在我正在生成空节点,因为已经写入了当前节点的开始标记。据我所知,这是不可逆转的。 有什么想法可以解决这个问题吗?
最好的问候
拉斯
更新
我想,我找到了解决方案。我将编写自己的类,实现XMLStreamWriter接口。在这个类中,我将使用队列或列表数据结构来存储开始标记,直到写入第一个属性或节点值。
更新2:
以下是对我的解决方案的更准确的描述。我使用了装饰器设计模式,以便将我的新类包装在标准的streamwriter类中。该类有一个ArrayList,其中存储起始标记直到调用writeCharacter方法。
答案 0 :(得分:1)
在浏览XML文件时,您可以通过xmlStreamReader.getEventType()
获取当前事件。当您遇到XMLStreamConstants.START_ELEMENT
时,您可以保留开头的标签名称,例如保留插入顺序的集合(如LinkedHashSet
)。
当您遇到XMLStreamConstants.CHARACTERS
时,请执行.getText()
并将之前存储的标记写入xmlStreamWriter
,但前提是此文本不为空(也许您还想.trim()
1}} .getText()
- 结果)。
此致 最大