Delphi的FormatXMLData导致EOutOfMemory

时间:2014-02-17 01:54:35

标签: xml delphi data-binding out-of-memory

所以,我一直在搜索但找不到答案。

SOF上有一个关于创建大型XML导致内存不足异常的问题,但这不是我的情况。

我正在通过XML数据绑定使用IXMLDocument创建XML,并且它创建得很好。

但是当将它保存到文件时,它只在一行文本中。 要做的就是在将XML保存到文件之前将XML传递给FormatXMLData。

这适用于小文件,但如果XML足够大,则会与EOutOfMemory崩溃。

所以我尝试添加选项[doNodeAutoIndent],但也没有用。

接下来,我创建了一个TStringList来接收XML,因此我可以停用IXMLDocument,然后在TSringList上尝试FormatXMLData。我并没有期待这么多,但我想这两个组件可能使用不同的内存管理器(我错误地认为IXMLDocument使用的是COM内存管理器而不是Delphi的?),而且现实非常接近预期,因为同样的例外情况被提出来了。

任何人都知道如何在使用XML数据绑定时使用FormatXMLData或任何其他选项缩进和格式化我的xml?

在StackOverFlow上阅读类似的问题,我看到了一些替代方案,包括一个SAX解析器来替换基于DOM的IXMLDocument,但我相信这会禁用XML数据绑定的优势,不是吗?

谢谢你, 努诺

1 个答案:

答案 0 :(得分:1)

只要SAX解析器可以将DOM树字符串作为输入流处理,您就不必用SAX解析器替换DOM解析器。

您还可以实现自己的基于流的格式化程序,它只需要根据字符串中的打开/关闭XML元素标记来缩进/取消该字符串。这将是快速且易于实施的。