我有一个大约300mb的大型XML文件,当我尝试使用XSLT进行转换时,它总是会出现内存不足的错误,任何人都可以为我推荐一个好的解决方案,以便能够成功转换XML文件错误。
我正在使用VB6并使用XSLT 1.0转换XML,并使用DOMDocument加载XML文档。
答案 0 :(得分:1)
您在这里使用了一些非常古老的技术,并且从您的问题中不清楚您是否永远受到该环境的限制。
使用现代XSLT处理器(如Saxon)可以使用300Mb,它可能需要2Gb的内存。许多XSLT处理器都有一个比DOM更节省空间的内部树模型,但我不知道你对MSXML的立场。
我们对您正在进行的转换以及它是否适合流式处理(即不在内存中构建整个树模型的处理)一无所知。如果它有潜在的可流性,那么您可以考虑各种方法(包括XSLT 3.0),但您在VB6中的选择可能非常有限。
答案 1 :(得分:0)
正如Bob77指出的那样,您应该明确切换到SAXXMLReader
并使用这种轻量级技术重写XSLT
转换。
创建一个类模块并包含语句Implements IVBSAXContentHandler
。
使用事件IVBSAXContentHandler_startElement
和IVBSAXContentHandler_endElement
动态执行 所需的更改,因为文件在读取时正在被解析。
您可以在MSDN上找到足够的即用型SAX类示例。