StAX 如何处理 XML 修改

How does StAX handle XML modifications

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

因此,对于 StAX,这种对源文件的修改可以在读取 <State>California</State> 后立即发生,并且仅在此之后,解析器才会继续处理下一个客户记录。 因此,当读取第二个客户记录时,第一个客户状态已经在 xml 中更新为状态代码。


--> 它是否通过临时跟踪要进行的更改来处理更新,并在解析整个文档后一次性更新整个文档。在这种情况下,如果大型文档(例如 10GB XML 文件)的更改太多,我猜测将会占用大量内存。
例子继续 - 因此,当处理第二个客户时,StAX 知道第一个客户的状态字段需要更新,但它会推迟更新,直到读取所有客户记录。它可以使用一些内存机制来跟踪需要更新到 XML 的内容。

您无法使用 StAX 就地更改 XML 文件,但您可以读入文件、写入另一个文件并即时应用更改。修改后的 StAX 事件(包括更改)立即写入目标文件(内部缓冲目的除外)。

因此,XML 文件的大小或更改的数量并不重要。

如果您的更改依赖于 XML 中的其他部分,那么它会变得更加困难。然后你可以分两次处理 XML 文件。第 1 遍用于收集更改的所有必要信息,第 2 遍用于使用第 1 遍收集的信息应用更改。 或者您可以使用完全不同的方法,例如 XML 数据库(例如 BaseX)并使用 XQuery 应用您的更改。