Autor Beitrag
gala
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Do 15.05.03 13:29 
Hallo Leute,

ich habe eine kleine Methode geschrieben, wo ich die XML-Datei auslese. Zuerst habe ich mit kleineren Dateien probiert und es ging sehr schnell. Jetzt verwende ich 7 MB-datei und was ist passiert?! Mein Gott, um ein einzelner Eitrag zu lesen, braucht mann mehrere Minuten. Ich verstehe das nicht. Ist das wegen Delphi, oder vielleicht XML? Oder mache ich irgendwas falsch?

Hier ist die Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button1Click(Sender: TObject);
 var
 myFirstXML : IXMLDocument;
 i,j : Integer;
  f: TextFile;
  g: String;
begin
myFirstXML := newXMLDocument;
myFirstXML.LoadFromFile('D:/input_mainplan.xml');
AssignFile(f, 'C:/test.txt');
    Append(f);
    for i := 0 to myFirstXML.DocumentElement.ChildNodes.Count -1 do
     for j := 0 to myFirstXML.DocumentElement.ChildNodes[i].ChildNodes.Count -1 do
     Writeln(f, myFirstXML.DocumentElement.ChildNodes[i].ChildNodes[j].Attributes['KO_NAME']);
    Flush(f);
    CloseFile(f);
end;



Danke im Voraus

gala


Moderiert von user profile icontommie-lie: Delphi-Tags hinzugefügt
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Do 15.05.03 18:48 
Hi,
XML hat einen Nachteil, da es von hause aus nicht "indiziert" ist, also quasi sequentiell aufgebaut ist (siehe deine For-Schleifen), muss die gesamte Datei geparst und "abgerannt" werden. Noch schlimmer wirds, wenn eine DTD oder Schema definiert ist.

IMHO gehts nur, wenn die Kiste gut ausgestattet ist (>n GHz, Many moore RAM)

grez.
msch
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 15.05.03 19:40 
Beim MS-XML-Parser gibt es die Möglichkeit, alle Nodes, die z.B. über das gesuchte Attribut "KO_NAME" verfügen in eine so genannte NodeList einlesen zu lassen. Diese Liste lässt sich dann mit einer for-Schleife durchgehen und z.B. in eine Textdatei übertragen.

Ich habe es nicht getestet, aber ich könnte mir vorstellen, dass der Schreibzugriff auf die Textdatei schneller geht, wenn der Parser selbst vorher die Knoten aussortiert.

Mal ausprobieren!

Grüße.