在Java中使用Stax时出现空xml节点的问题

时间:2012-01-19 12:29:33

标签: java xml streamwriter stax

我正在使用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方法。

1 个答案:

答案 0 :(得分:1)

在浏览XML文件时,您可以通过xmlStreamReader.getEventType()获取当前事件。当您遇到XMLStreamConstants.START_ELEMENT时,您可以保留开头的标签名称,例如保留插入顺序的集合(如LinkedHashSet)。

当您遇到XMLStreamConstants.CHARACTERS时,请执行.getText()并将之前存储的标记写入xmlStreamWriter,但前提是此文本不为空(也许您还想.trim() 1}} .getText() - 结果)。

此致 最大