我有很多代码使用TXMLDocument生成XML,如下所示:
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文件时遇到了严重问题:
我将问题归结为使用基于DOM的XML编写器,但即使是基于DOM的编写器也可以通过将生成的内容部分写入(并锁定)到流中来处理这种情况。
如何在不过多触及现有代码的情况下解决此问题?
修改:此问题已经结束,我发布了另一个相关但更常见的问题,针对general ability of Delphi to directly write XML。