【问题标题】:Appending an XML element using StaX使用 StaX 附加 XML 元素
【发布时间】:2011-08-31 19:55:41
【问题描述】:

我有一个使用用户节点列表的 xml 文档。

有没有办法使用 StAX API 执行以下操作?

  1. 更新密码属性[用于更改密码选项]
  2. 添加新用户节点

【问题讨论】:

  • 没有,stax文档上没有附加,你必须重新构建整个文档。
  • 我和 Nageswara 有同样的问题。至少可以写入我读取的同一个文件吗?还是我必须以某种方式缓冲?举个例子会很有帮助。

标签: java xml stax


【解决方案1】:

在我看来,StAX 听起来并不是最简单的选择。不过……

XMLStreamReader 接口有一个getLocation() 方法,因此当您遇到感兴趣的 XML 字符串的一部分时,您可以维护一个稍后要执行的操作列表,以及您应该执行它们的位置.

所以粗略的伪代码:

while (parsing) {
    int event = xmlStreamReader.next();
    if (isEventPasswordAttribute(event)) {
        // create an Action to update password attribute,
        // passing in xmlStreamReader.getLocation() and other necessary parameters
    } else if (isTimeToAddNewUserNode(event)) {
        // create an Action to add new user
        // passing in xmlStreamReader.getLocation() and other necessary parameters
    }
} // end parse

...

for (Iterator<Action> it = actions.iterator(); it.hasNext(); ) {
    Action action = it.next();
    action.perform();
}

Action 当然需要传递对原始 XML String/Stream 的引用才能对其进行更新。对于字符串,这应该很容易。对于 Stream 可能不是,因为一旦第一次读取流,它可能无法成为 reset()。在执行原始解析时,您可能必须自己缓冲所有内容。并且您必须小心操作不会改变位置,否则后续操作会查看 XML 流中的错误位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 2013-09-17
    相关资源
    最近更新 更多