Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
大文件上的xmlstarlet sel_Xml_Xpath_Command Line_Xmlstarlet - Fatal编程技术网

大文件上的xmlstarlet sel

大文件上的xmlstarlet sel,xml,xpath,command-line,xmlstarlet,Xml,Xpath,Command Line,Xmlstarlet,命令 $ xmlstarlet sel -t -c "/collection/record" file.xml 似乎在应用给定的Xpath表达式之前将整个文件加载到内存中。这不适用于大型XML文件 xmlstarlet是否提供了从大型(100G+)XML文件中提取子元素的流模式?xmlstarlet将所有(或大部分)操作转换为xslt转换,因此简短的回答是否 您可以尝试使用,这是一种类似于xslt的流式转换语言。另一方面,如果您不太关心xml,只需使用python编写一些东西,或者可能更容易、

命令

$ xmlstarlet sel -t -c "/collection/record" file.xml
似乎在应用给定的Xpath表达式之前将整个文件加载到内存中。这不适用于大型XML文件

xmlstarlet
是否提供了从大型(100G+)XML文件中提取子元素的流模式?

xmlstarlet将所有(或大部分)操作转换为xslt转换,因此简短的回答是否


您可以尝试使用,这是一种类似于xslt的流式转换语言。另一方面,如果您不太关心xml,只需使用python编写一些东西,或者可能更容易、更快(创建代码需要时间)。

因为我只需要XPath的一小部分来处理大型xml文件,所以实际上我自己实现了一个小工具:

我的问题的例子可以这样写:

$ xmlcutty -path /collection/record file.xml

谢谢,我想是的,我也考虑过写一个小工具——只是希望有一些工具,我错过了。我认为缺乏通用的xml流工具(这只是我个人的猜测)是由于xml特性和标准的数量太多造成的。大多数xml标准的全套功能不可能以流友好的方式实现。是的,可能是这样。但是,即使对于像XML拆分这样的较轻的任务,也只有一些相对未知的工具,比如“XML_拆分”。这有点令人沮丧。perl模块XML::Twig(像XML_grep和XML_split这样的程序就是用它构建的)能够用相对较少的内存处理非常大的文件,相当容易快速编写一些程序。在Linux中的包Pel-XML- TWIG中,您还可以考虑像XBASE这样的数据库系统,或者在XML数据上提供XQuery(XPath的超集)。@ MartinHonnen Thanks,在引入额外组件时,我有点犹豫。最后,我只需要选择XML文件的一部分以供以后处理,而不需要高级查询。如果您经常反复执行相同的操作,那么使用XML数据库将非常有趣。XML数据库将为您节省在XML解析树中解析和搜索所需的时间:解析只需执行一次,并且可以定义其他索引。也就是说,选择或调整这样的数据库并不容易或直接,因为xml不是为数据库目的而设计的。