我有一个大型的XML文件大约300mb,当我尝试用XSLT转换它时,它总是会出现内存不足错误,任何人都可以推荐一个好的解决方案,以便我能够在没有错误的情况下成功转换XML文件。使用VB6和XSLT转换大型XML文件
我正在使用VB6并使用XSLT 1.0转换XML,并使用DOMDocument来加载XML文档。
我有一个大型的XML文件大约300mb,当我尝试用XSLT转换它时,它总是会出现内存不足错误,任何人都可以推荐一个好的解决方案,以便我能够在没有错误的情况下成功转换XML文件。使用VB6和XSLT转换大型XML文件
我正在使用VB6并使用XSLT 1.0转换XML,并使用DOMDocument来加载XML文档。
你在这里使用了一些非常古老的技术,从你的问题来看,你是否永远受到这种环境的制约并不清楚。
300Mb使用现代XSLT处理器(如Saxon)是可行的,它可能需要2Gb的内存。许多XSLT处理器具有比DOM更节省空间的内部树模型,但是我不知道你在MSXML中的位置。
我们对您正在进行的转换以及它是否适合流式传输(即在没有在内存中构建整个树模型的情况下处理)一无所知。如果它有潜在的流传性,那么可以考虑多种方法(包括XSLT 3.0),但是在VB6中的选项可能会非常有限。
正如Bob77指出的那样,您应该明确切换到SAXXMLReader
并使用这种轻量级技术重写您的XSLT
转换。
创建一个班级模块并包含语句Implements IVBSAXContentHandler
。
使用事件IVBSAXContentHandler_startElement
和IVBSAXContentHandler_endElement
做上飞需要的变化,因为它是读取文件被解析。
您可以在MSDN上找到足够多的即用型SAX类示例。
MSXML IXSLProcessor必须接受来自DOM的输入,但其输出可以通过SAX Writer发送。这消除了输出DOM的内存损失,这可能或可能不够。 – Bob77
如果可能,完全丢弃XSLT并编写自定义程序以使用SAX输入和输出进行转换。 XSLT设计为在有限的脚本环境中轻量级使用。 – Bob77