2011-08-31 77 views
1

我有一个xml文档,我在其中使用了用户节点列表。使用StaX附加XML元素

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

  1. 更新密码属性[变更密码选项]
  2. 添加一个新用户节点
+0

没有,stax文档上没有附加内容,您必须重新构建整个文档。 –

+0

我有和Nageswara一样的问题。至少可以写入我读取的同一个文件吗?或者我必须以某种方式缓冲?一个例子会非常有帮助。 – lony

回答

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(); 
} 

需要以更新它要传递给原始的XML字符串/流标准路线的行动。对于字符串,这应该很容易。对于可能不是的流,一旦流首次被读取,它可能不能成为reset()。在执行原始分析时,您可能必须自行缓冲所有内容。而且您必须小心操作不会改变位置,否则随后的操作将查看XML流中的错误位置。