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

时间:2016-12-15 11:08:05

标签: java xml alfresco stax

压缩可以从根本上减少大的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标题),则无需将完整的XML加载到DOM。当找到所有请求的项目(或者没有机会找到它们)时,算法应该停止读取XML文件。

是否提供了Alfresco服务或java库,并使用例如XML从XML中提取所请求的项目。 StAX2 APIWoodstox)?

1 个答案:

答案 0 :(得分:0)

我认为你可以很好地使用Stax:

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

然后使用XMLEventReader通过XMLEvent读取XMLEvent。 如果您在XML中找到了相关的标记和值,则可以调用r.close(),它将关闭Stax Parser(但不是zip输入流)并继续下一个zip条目。< / p>