Tho*_*sen 4 java xml xslt streaming stx
我有一种情况,我想从一些非常大但常规的XML文件中提取一些信息(只需要使用500 Mb文件),并且XSLT将是完美的.
不幸的是,我所知道的那些XSLT实现(除了最昂贵的Saxon版本之外)不支持只读取DOM的必要部分,而是读取整个树.这导致计算机交换死亡.
有问题的XPath是
//m/e[contains(.,'foobar')
Run Code Online (Sandbox Code Playgroud)
所以它基本上只是一个grep.
是否有可以执行此操作的XSLT实现?或者给出合适的"建议"的XSLT实现可以修复内存中不再需要的部分吗?
我更喜欢Java实现,但Windows和Linux都是可行的本机平台.
编辑:输入XML看起来像:
<log>
<!-- Fri Jun 26 12:09:27 CEST 2009 -->
<e h='12:09:27,284' l='org.apache.catalina.session.ManagerBase' z='1246010967284' t='ContainerBackgroundProcessor[StandardEngine[Catalina]]' v='10000'>
<m>Registering Catalina:type=Manager,path=/axsWHSweb-20090626,host=localhost</m></e>
<e h='12:09:27,284' l='org.apache.catalina.session.ManagerBase' z='1246010967284' t='ContainerBackgroundProcessor[StandardEngine[Catalina]]' v='10000'>
<m>Force random number initialization starting</m></e>
<e h='12:09:27,284' l='org.apache.catalina.session.ManagerBase' z='1246010967284' t='ContainerBackgroundProcessor[StandardEngine[Catalina]]' v='10000'>
<m>Getting message digest component for algorithm MD5</m></e>
<e h='12:09:27,284' l='org.apache.catalina.session.ManagerBase' z='1246010967284' t='ContainerBackgroundProcessor[StandardEngine[Catalina]]' v='10000'>
<m>Completed getting message digest component</m></e>
<e h='12:09:27,284' l='org.apache.catalina.session.ManagerBase' z='1246010967284' t='ContainerBackgroundProcessor[StandardEngine[Catalina]]' v='10000'>
<m>getDigest() 0</m></e>
......
</log>
Run Code Online (Sandbox Code Playgroud)
Essentialy我想选择一些m节点(我知道XPath是错误的,它只是一个快速的黑客),但保持XML布局.
编辑:似乎STX可能是我正在寻找的(我可以使用另一种转换语言),并且Joost是一个实现.有经验吗?
编辑:我发现带有-Xmx1500m的Saxon 6.5.4可以加载我的XML,所以这让我现在可以使用我的XPath.这只是一个幸运的中风所以我仍然想要一般性地解决这个问题 - 这意味着可编写脚本,这反过来意味着首先没有手工制作的Java过滤.
编辑:哦,顺便说一下.这是一个非常类似于log4j XMLLayout生成的日志文件.XML的原因是能够做到这一点,即对日志进行查询.这是最初的尝试,因此是一个简单的问题.后来我希望能够提出更复杂的问题 - 因此我希望查询语言能够处理输入文件.
考虑VTD-XML.这是多少更多的内存效率.你可以找到一个API 在这里和基准这里.
alt text http://www.ximpleware.com/2.3/benchm4.gif
请注意,最后一个图表说DOM使用的内存至少是XML文件的5倍.毕竟真的很惊人,不是吗?
作为奖励,它在解析和Xpath方面也比DOM和JDK更快:
alt text http://www.ximpleware.com/2.3/benchm3.gif
alt text http://vtd-xml.sourceforge.net/2.3/benchm27.gif
| 归档时间: |
|
| 查看次数: |
1981 次 |
| 最近记录: |