Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何存储大的压缩XML并有效地只提取它的某些特定数据(Alfresco)?_Java_Xml_Alfresco_Stax - Fatal编程技术网

Java 如何存储大的压缩XML并有效地只提取它的某些特定数据(Alfresco)?

Java 如何存储大的压缩XML并有效地只提取它的某些特定数据(Alfresco)?,java,xml,alfresco,stax,Java,Xml,Alfresco,Stax,压缩可以从根本上减少较大的XML文件大小,这会对以下方面产生影响: 存储空间使用情况,IO等待(读取和写入) 网络使用 我只需要从压缩的XML中提取一些特定的数据。 这是Rhino的JavaScript(主要是Java)示例: 但是,如果我只需要提取一些特定元素(例如从XML头中提取),就不需要将完整的XML加载到DOM中。当找到所有请求的项(或者没有机会找到它们)时,算法应该停止读取XML文件 是否有Alfresco提供的服务或java库可以这样做,并使用例如()从XML中提取请求的项目?

压缩可以从根本上减少较大的XML文件大小,这会对以下方面产生影响:

  • 存储空间使用情况,IO等待(读取和写入)
  • 网络使用
我只需要从压缩的XML中提取一些特定的数据。 这是Rhino的JavaScript(主要是Java)示例:

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


是否有Alfresco提供的服务或java库可以这样做,并使用例如()从XML中提取请求的项目?

我认为您可以很好地使用Stax来实现这一点:

XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader r = factory.createXMLEventReader
                   (ze.getName(),zis );
然后使用XMLEventReader逐个读取XMLEvent。
如果您在正在查找的XML中找到了相关的标记和值,可以调用r.close(),这将关闭Stax解析器(但不是zip输入流)并继续下一个zip条目。

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

XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader r = factory.createXMLEventReader
                   (ze.getName(),zis );
然后使用XMLEventReader逐个读取XMLEvent。
如果在要查找的XML中找到了相关的标记和值,可以调用r.close(),这将关闭Stax解析器(但不是zip输入流)并继续下一个zip条目。

似乎并不容易。您能告诉我们如何指定要检索的内容吗?例如,第一个非根标记、第300个标记、所有文本内容。。。如果我们知道这一点,可能会有办法尽可能快地完成它。@GPI-例如,pathsy的映射(hashmap),您可以使用Stax2/Woodstox提取所需的XML部分,然后运行XPath。但这并不容易(细节中有很多魔鬼)。我找到了一个解释这项技术和相关源代码的老版本,但它似乎得到了维护。我没有用过它,但它可能正好满足您的需要。@vanOekel谢谢,我将检查这些链接并让您知道结果似乎并不容易。您能告诉我们如何指定要检索的内容吗?例如,第一个非根标记、第300个标记、所有文本内容。。。如果我们知道这一点,可能会有办法尽可能快地完成它。@GPI-例如,pathsy的映射(hashmap),您可以使用Stax2/Woodstox提取所需的XML部分,然后运行XPath。但这并不容易(细节中有很多魔鬼)。我找到了一个解释这项技术和相关源代码的老版本,但它似乎得到了维护。我没有使用过它,但它可能刚好满足您的需要。@vanOekel谢谢,我将检查这些链接并让您知道结果谢谢,我知道如何使用StAX:谢谢,我知道如何使用StAX: