Замена XML-генерации TXMLDocument (на основе DOM) решением, способным выполнять запись в поток во время генерации XML-файла.

У меня есть много кода, который генерирует XML с использованием TXMLDocument, который выглядит следующим образом:

function Obj.SaveToXmlNode(XmlNode: IXmlNode; SubnodeName: string): IXmlNode;
begin
    Result := XmlNode.AddChild(SubnodeName);
    SaveFieldToXmlNode(Result, 'FIELD1', 'Value1', 'PrevValue1');
    SaveFieldToXmlNode(Result, 'FIELD2', 'Value2', 'PrevValue2');
    //...
end;

с участием

function SaveFieldToXmlNode(XmlNode: IXmlNode; FieldName: string; NewVal: Variant;
            OldVal: Variant): IXmlNode;
var
    FieldNode: IXMLNode;
begin
    FieldNode := XmlNode.AddChild(FieldName);
    FieldNode.NodeValue := NewVal;
    if not VarIsEmpty(OldVal) then
            FieldNode.Attributes[XML_OLDVALUE] := OldVal;
end;

Я столкнулся с серьезными проблемами, используя эту реализацию для создания большого файла XML:

Использование памяти: для больших файлов я использовал больше, чем ГБ памяти, какэтот случай.Генерация XML-файла не очень быстрая.Моя главная проблема: XML генерируется внутри веб-сервера как ответ на запрос http. кизбегать проблемXML должен быть записан в поток во время его генерации.

Я объяснил проблемы использованием XML-модуля записи на основе DOM, но, возможно, даже модуль записи на основе DOM может справиться с этой ситуацией путем частичной записи (и блокировки) сгенерированного содержимого в поток.

Как я могу разрешить эту ситуацию, не слишком касаясь моего существующего кода?

Редактировать: Пока этот вопрос был закрыт, я разместил еще один связанный, но более распространенный вопрос, нацеленный наобщая способность Delphi напрямую писать XML.

Ответы на вопрос(1)

Ваш ответ на вопрос