StAX如何处理XML修改

时间:2016-11-10 15:07:29

标签: java xml sax stax

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

因此,使用StAX,可以在读取<State>California</State>之后立即对源文件进行此修改,并且仅在此之后解析器继续执行下一个客户记录。 因此,当读取第二个客户记录时,第一个客户状态已经在xml到状态代码中更新。


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

1 个答案:

答案 0 :(得分:0)

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

因此,XML文件的大小或更改的数量无关紧要。

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