高效的XSLT处理器

时间:2011-08-12 05:45:14

标签: xslt converter saxon

我以前使用Saxon 8.9的免费版本来转换基于某些XSL的XML。但该版本的问题是大小为260 MB及以上的大型XML文件,Saxon给出了“内存不足”的例外情况。我有一个免费版的Saxon 9.2,但问题仍然是一样的。这台机器有2GB的RAM。有没有人知道更好的Saxon版本或其他一些可以解决问题的高效转换器(但它必须是免费的)?如果没有可用的免费软件,也可以建议使用可购买的转换器,但优先考虑撒克逊的产品。

3 个答案:

答案 0 :(得分:1)

所以我尝试了一个超过300mb'的

 -rw-r--r--    1 nicolasm Administ 311056011 Aug 12 15:27 test1.xml

在命令行中,将内存设置提升了一点'

 java -Xmx1400m -jar saxon9-9.1.0.8.jar test1.xml test.xsl > out.xml

转型进展顺利。

请注意

  • 我在Windows 32位上进行了测试,因此不能超过1.5g的内存来创建一个java虚拟机。
  • XSL很简单。

所以,从那以后,有两个问题:

  • 你的XSL有多复杂。 XSLT的内存使用在很大程度上取决于使用何种指令
  • 你给JVM多少内存?

答案 1 :(得分:1)

对于大文档,您通常希望避免一次将整个文档加载到内存中。不幸的是,XSLT并不是真的设计用于处理这种情况(尽管看起来XSLT 2.1有一些关于流的考虑因素,但我不确定是否还有任何实现)。

您可以调查使用Streaming Transformations for XML吗?

答案 2 :(得分:0)

传统上,XSLT的设计使得它需要将整个XML文档加载到内存中。因此,平均而言,应用XSL所需的内存通常是输入XML大小的两倍或三倍,或者在最坏的情况下,它可能需要内存高达输入XML大小的10倍。 Saxon 9.3提供了XML的流式转换功能。因此,在这种情况下,消耗的内存是一致的。但它需要在XSL中进行更改,并且一个接一个地处理的节点应该彼此独立。流式转换XML不会将整个文档加载到内存中,因此需要更少的内存,理想情况下可以处理任何大小的XML文档。