【发布时间】:2011-08-31 19:55:41
【问题描述】:
我有一个使用用户节点列表的 xml 文档。
有没有办法使用 StAX API 执行以下操作?
- 更新密码属性[用于更改密码选项]
- 添加新用户节点
【问题讨论】:
-
没有,stax文档上没有附加,你必须重新构建整个文档。
-
我和 Nageswara 有同样的问题。至少可以写入我读取的同一个文件吗?还是我必须以某种方式缓冲?举个例子会很有帮助。
我有一个使用用户节点列表的 xml 文档。
有没有办法使用 StAX API 执行以下操作?
【问题讨论】:
在我看来,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 流中的错误位置。
【讨论】: