ihr werdet es nicht glauben, aber es gibt nun auch einen
SAX-Parser
er benutzt fast die selbe Leseroutine wie TXMLFile, nur daß diese aufgesplittet und etwas modifiziert wurde.
Code:
fill TXMLFile with 3.500.000 nodes, save into and load this from a file
create:0 fill:15852 save:10416 free:2378
create:0 load:24470 free:2237
load a file into TXMLFile with 3.500.000 nodes as virtual
SAX mode
create:0 load:32710 free:0
load a file over TSAXParser with 3.500.000 nodes
create:0 load:14488 free:0
er ist auch garnicht so schwer zu nutzen
Delphi-Quellcode:
SAX := TSAXParser.Create(
nil);
Try
SAX.Open('
Test.xml');
While SAX.
Read(Node, B)
do Begin
...
End;
Finally
SAX.Free;
End;
Delphi-Quellcode:
TSAXParser = Class
Procedure Open(Const FileName: TWideString);
Procedure Open(Stream: TStream; ...);
Procedure Open(Buffer: Pointer; Len: Integer; ...);
Property FileName: TWideString;
Procedure Close;
Property Options: TXMLOptions;
Property Version: TWideString;
Property Encoding: TWideString;
Property Standalone: TWideString;
Property Levels: Integer;
Property Node[Level: Integer]: TSAXNode;
Function Read(Out Node: TSAXNode; Out isClosedTag: Boolean): Boolean;
Function Progress: LongInt;
End;
TSAXNode = Class
Property Level: Integer;
Property NodeType: TXMLNodeType;
Property FullPath: TWideString;
Property Name: TWideString;
Property Namespace: TWideString;
Property NameOnly: TWideString;
Property AttributeCount: Integer;
Property AttributeName[Index: LongInt]: TWideString;
Property Attribute[Const IndexOrName: TIndex]: Variant;
Property isOpenedTag: Boolean;
Property Data: Variant;
Property SubNodes: Integer;
End;
wird dann mit'm nächsten Update hochgeladen