Java -更新大型XML文件中的元素



我使用非常大的XML数据集(1gb以上),需要根据后面的其他元素的值回溯和更新每个节点的特定元素。

例如,在这个记录/node中:

<user>
<role>Associate</role>
<team>Hufflepuff</team>
<experience>7</experience>
</user>

自"experience"大于5年,角色需要从"associate"更新为"associate"。"高级!">

我想避免通过DOM将整个文件加载到内存中。

理想情况下,我会处理每个单独的"用户"。并将数据一次一个地附加到新的XML文件中。我开始使用StAX在流中进行处理,但我不知道如何将每个XMLEventWriter事件内容转换为一个可用的DOM文档,该文档写入XML文件,然后从内存中清除。

如果描述有任何不清楚的地方,请让我知道。如有任何帮助,我将不胜感激。

谢谢。

在XSLT 3.0中使用流,您可以

<xsl:template match="user" mode="streamed">
<xsl:apply-templates select="copy-of(.)" mode="unstreamed"/>
</xsl:template>

,在非流模式下,你可以处理(复制的)user元素作为内存中的子树,没有流限制。

我对SAX做了同样的事情;当你点击user的startElement事件开始构建树时,当相应的endElement事件发生时,以任何你喜欢的方式处理树是很容易的。

我不会使用像StAX这样的pull API。我相信这是可以做到的,但可能需要更多的努力。

最新更新