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