2016-12-07 63 views
0

我有一个大型的XML文件大约300mb,当我尝试用XSLT转换它时,它总是会出现内存不足错误,任何人都可以推荐一个好的解决方案,以便我能够在没有错误的情况下成功转换XML文件。使用VB6和XSLT转换大型XML文件

我正在使用VB6并使用XSLT 1.0转换XML,并使用DOMDocument来加载XML文档。

+0

MSXML IXSLProcessor必须接受来自DOM的输入,但其输出可以通过SAX Writer发送。这消除了输出DOM的内存损失,这可能或可能不够。 – Bob77

+1

如果可能,完全丢弃XSLT并编写自定义程序以使用SAX输入和输出进行转换。 XSLT设计为在有限的脚本环境中轻量级使用。 – Bob77

回答

1

你在这里使用了一些非常古老的技术,从你的问题来看,你是否永远受到这种环境的制约并不清楚。

300Mb使用现代XSLT处理器(如Saxon)是可行的,它可能需要2Gb的内存。许多XSLT处理器具有比DOM更节省空间的内部树模型,但是我不知道你在MSXML中的位置。

我们对您正在进行的转换以及它是否适合流式传输(即在没有在内存中构建整个树模型的情况下处理)一无所知。如果它有潜在的流传性,那么可以考虑多种方法(包括XSLT 3.0),但是在VB6中的选项可能会非常有限。

0

正如Bob77指出的那样,您应该明确切换到SAXXMLReader并使用这种轻量级技术重写您的XSLT转换。

创建一个班级模块并包含语句Implements IVBSAXContentHandler

使用事件IVBSAXContentHandler_startElementIVBSAXContentHandler_endElement上飞需要的变化,因为它是读取文件被解析。

您可以在MSDN上找到足够多的即用型SAX类示例。