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



我正在开发一个用于格式转换的xml编写器。我决定使用StAX API(确切地说是游标API),因为它具有流功能(输入文件非常大,需要逐段编写)。我使用数据格式(一些类)来存储输入文件中解析的值。我还创建了一些用于编写xml文件的类,这些类具有writeNode方法。这种方法看起来像这样:

public void writeNode(Object object){
writer.writeStartElement();
... some writeNode calls of the children nodes
writer.writeEndElement();
}

名为"writer"的对象是StAXStreamWriter类的一个实例。我的问题是,有时这些子节点是空的。在这些情况下,根本不应该写入父节点。现在我正在生成空节点,因为当前节点的开始标记已经被写入。据我所知,这是无法逆转的。有什么解决这个问题的办法吗?

向致以最良好的问候

Lars

更新:

我想,我找到了解决办法。我将编写自己的类,实现XMLStreamWriter接口。在这个类中,我将使用队列或列表数据结构来存储开始标记,直到写入第一个属性或节点值。

更新2:

以下是对我的解决方案的更精确描述。我使用了decorator设计模式,以便将我的新类包装在标准streamwriter类周围。这个类有一个ArrayList,在调用writeCharacter方法之前,开始标记都存储在其中。

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

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

谨致问候,最大

最新更新