【问题标题】:Problems with empty xml nodes when using Stax in Java在 Java 中使用 Stax 时出现空 xml 节点的问题
【发布时间】:2012-02-14 02:38:35
【问题描述】:

我正在开发用于格式转换的 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:

这是对我的解决方案的更准确描述。我使用装饰器设计模式来将我的新类包装在标准流编写器类周围。这个类有一个 ArrayList,在调用 writeCharacter 方法之前,开始标签被存储在其中。

【问题讨论】:

    标签: java xml streamwriter stax


    【解决方案1】:

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

    当你然后遇到XMLStreamConstants.CHARACTERS时,做一个.getText()并将之前存储的标签写入xmlStreamWriter,但前提是这个Text不为空(也许你也想.trim().getText()-结果)。

    问候, 最大

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-11
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      相关资源
      最近更新 更多