【发布时间】:2016-11-10 15:07:29
【问题描述】:
可以使用 StAX 修改 XML 文件。但我想了解的是 -
--> StAX 是否可以在遇到事件时更新 XML 文档。如果是这样,那么就没有很大的内存占用了。
示例 - 如果我正在读取 Customers.xml 文件并且我需要更改从 StateName 到 StateCode 的每个客户的状态信息。然后当我遇到内容-<State>California</State>我想改成<State>CA</State>
因此,StAX 确实可以在读取<State>California</State> 后立即对源文件进行修改,并且只有在此之后解析器才会继续处理下一个客户记录。
因此,当读取第二个客户记录时,第一个客户状态已经在 xml 中更新为状态代码。
或
--> 它是否通过临时跟踪要进行的更改来处理更新,并在解析整个文档后一次性更新整个文档。在这种情况下,我猜如果对大型文档(比如 10GB XML 文件)进行太多更改,将会占用大量内存。
示例继续 -
因此,当处理第二个客户时,StAX 知道第一个客户的状态字段需要更新,但它会推迟更新,直到读取所有客户记录。它可以使用一些内存机制来跟踪需要更新到 XML 中的内容。
【问题讨论】:
-
请澄清你的第一句话。显示一些示例代码。你的意思是就地改变?我敢肯定 StAX 不可能做到这一点。
-
@vanje,我不是在 StAX 中编程,但我正在评估它以供我的团队使用它来读取和修改大型 xml 文件 (1GB+)。但我绝对可以澄清这个问题。正在编辑问题以使其更清楚。