如何StAX的处理XML的修改使用StAX

问题描述:

修改XML文件是可能的。但是,我想了解的是 -
- >是否有可能使用StAX更新XML文档,当它遇到的事件。如果这样做的话,那么就不会有很大的内存占用。
示例 - 如果我正在阅读Customers.xml文件,我需要将每个客户的状态信息从StateName更改为StateCode。然后,当我遇到内容 -
<State>California</State>我想将其更改为<State>CA</State>如何StAX的处理XML的修改使用StAX

所以使用StAX也可以这样修改源文件立即读取<State>California</State>后发生,仅只有经过解析器下一个客户向前走记录。 因此,当读取第二个客户记录时,第一个客户状态已经在xml中更新为状态码。


- >做它暂时保持跟踪要做出的改变处理更新和解析整个文档后更新单个去整个文档。在这种情况下,我会猜测如果大文档(比如10GB XML文件)发生太多变化,将会有巨大的内存占用。
示例续 - 因此,当处理第二个客户时,StAX知道第一个客户的状态字段需要更新,但它会将其延迟,直到读取所有客户记录。它可以使用一些内存机制来跟踪需要更新到XML的内容。

+2

请clarifiy你的第一句话。显示一些示例代码。你的意思是就地改变了吗?我相信这是StAX无法实现的。 – vanje

+0

@vanje,我不是在StAX中编程,而是在评估它为我的团队使用它来读取和修改大型xml文件(1GB +)。但我绝对可以澄清这个问题。我正在编辑问题以使其更清楚。 – RedwinD

+0

for!GB +文件大小,VTD-XML的增量更新功能是您可能想要考虑的东西...对于10GB +文件,stax可悲是您唯一的选择...... –

不能使用StAX更改的XML文件原地的,但你可以读取文件,写入到另一个文件,并应用在即时变更。修改后的StAX事件(包括更改)会立即写入目标文件(内部缓冲目的除外)。

所以你的XML文件的大小或更改的数量并不重要。

如果所做的更改在XML依赖于其他地区则变得更加困难。然后您可以两次处理XML文件。通过1用于收集所有必要的更改信息,通过2用于将更改与通过1收集的信息一起应用。 或者,您可以使用完全不同的方法,如XML数据库(例如BaseX),并将更改与XQuery一起应用。