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

标签 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 接口(interface)。在本类(class)中,我将使用队列或列表数据结构来存储开始标记,直到写入第一个属性或节点值。

更新2:

这是我的解决方案的更准确描述。我使用了装饰器设计模式,以便将我的新类包装在标准 Streamwriter 类周围。该类有一个 ArrayList,其中存储开始标记,直到调用 writeCharacter 方法为止。

最佳答案

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

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

问候, 最大

关于java - 在Java中使用Stax时出现空xml节点的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8926021/

相关文章:

java - 解决间歇性垃圾收集问题 - Java

html - xsl 聚合或子查询

java - BufferedWriter、FileWriter、Output Stream……做这些事情最现代的方法是什么?

java - Java 的 JEditorPane 是否有一个好的替代品?

java - LiquidFun 渲染粒子

css - 有没有办法修改 Jersey 生成的 XML 响应以包含样式表信息?

android - 缺少 NativeExpressAdView XML 属性 adSize

c# - 使用 Writeline 创建批处理文件

asp.net - 为什么我的 StreamWriter Response 输出在 Excel 中产生垃圾重音,但在记事本中看起来很好?

java - GlyphMapping 中的 PDFClown NullPointerException