gpt4 book ai didi

java - 如何存储大的压缩 XML 并有效地仅提取其某些特定数据(Alfresco)?

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:20 24 4
gpt4 key购买 nike

压缩可以从根本上减少大型 XML 文件的大小,这会影响:

  • 存储空间使用情况、IO 等待(读取和写入)
  • 网络使用情况

我必须从压缩的 XML 中仅提取一些特定数据。这是 Rhino 的 JavaScript(主要是 Java)示例:

var zis = new java.util.zip.ZipInputStream(document.properties.content.getInputStream());
var ze = zis.getNextEntry();
if (ze!=null){
var scanner = new java.util.Scanner(zis,"UTF-8").useDelimiter("\\A");
var content = scanner.hasNext() ? scanner.next() : "";
var docXml = new XML(content);
logger.log("xml mytag/text(): "+docXml.mytag);
}
zis.closeEntry();
zis.close();

但是,如果我只需提取一些特定元素(例如从 XML header ),则无需将完整的 XML 加载到 DOM。当找到所有请求的项目(或者没有机会找到它们)时,算法应该停止读取 XML 文件。

是否有任何提供的 Alfresco 服务或 java 库可以执行此操作并使用例如从 XML 中提取请求的项目StAX2 API (Woodstox)?

最佳答案

我认为您可以很好地使用 Stax 来实现此目的:

XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader r = factory.createXMLEventReader
(ze.getName(),zis );

然后使用 XMLEventReader 通过 XMLEvent 读取 XMLEvent。如果您在要查找的 XML 中找到了相关标签和值,则可以调用 r.close(),这将关闭 Stax 解析器(但不是 zip 输入流)并继续处理下一个 zip 条目。

关于java - 如何存储大的压缩 XML 并有效地仅提取其某些特定数据(Alfresco)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41162655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com