![]() |
Problem beim Auslesen mit mehreren Ebenen (MSXML)
Hallo zusammen,
ich habe die folgende XML-Datei (ein Ausschnitt) :
XML-Code:
Da mehrere solcher Abschnitte folgen können, versuche ich mit dieser Procedure die Struktur einzulesen und ein SQL-Skript daraus zu bauen :
<Haupt>
<Kunde> <Stammdaten> <Datensatz> <STAMMNR>373</STAMMNR> <STATUSNR>2</STATUSNR> <FIRMA>1</FIRMA> <NAME>'Neuer'</NAME> <VORNAME>''</VORNAME> <KURZNAME>'Neuer'</KURZNAME> <ANREDENR>5</ANREDENR> <BEMERKUNG>''</BEMERKUNG> <KENWORT>''</KENWORT> <AKTIVE>1</AKTIVE> </Datensatz> </Stammdaten> <Adresse /> <Internet /> <Telefon /> </Kunde> </Haupt>
Delphi-Quellcode:
Das funktioniet bis zur ersten Node unterhalb der Ebene <Datensatz>. Beim zweiten Mal kommt eine AccessViolation in der Zeile 28. Ich habe es auch schon mit einen
procedure TImportDlgForm.BBtn_ImportClick(Sender: TObject);
var CustomerCount : Integer; newCustomer : IXMLDOMNodeList; newDataSet : IXMLDOMNodeList; ArrCount : Integer; FieldsCounter : Integer; newSQLCommand : TStringList; newFieldsNames: string; newFieldsValue: string; subNode: IXMLDOMNode; begin newSQLCommand := TStringList.Create; newSQLCommand.Clear; newCustomer := xmlDoc.documentElement.selectNodes('Kunde'); for CustomerCount := 0 to newCustomer.length - 1 do begin for ArrCount := 0 to 4 do begin newFieldsNames := ''; newFieldsValue := ''; newDataSet := newCustomer.item[CustomerCount].selectNodes(DBTables[ArrCount] + '/Datensatz'); if newDataSet.length <> 0 then begin FieldsCounter := 0; subNode := newDataSet.item[FieldsCounter].firstChild; while newDataSet <> nil do begin newFieldsNames := newFieldsNames + subNode.nodeName + ', '; newFieldsValue := newFieldsValue + subNode.Text + ', '; subNode := newDataSet.item[FieldsCounter].nextSibling end; newSQLCommand.Add('INSERT INTO ' + DBTables[ArrCount] + ' (' + newFieldsNames + ') Values (' + newFieldsValue + ');'); end; end; // FOR-Schleife für das Array der Datenbanktabellen end; // FOR-Schleife für die Anzahl der Kunden newSQLCommand.SaveToFile('D:\Test.sql'); end;
Delphi-Quellcode:
nach der Zeile FieldsValue ausprobiert. Nur dann kommt die AccessViolation in der Zeile
FieldsCounter := FieldsCounter + 1;
Delphi-Quellcode:
Was mache ich wo falsch und warum ? Fange gerade erst an mit MSXML zu arbeiten.
subNode := newDataSet.item[FieldsCounter].nextSibling
|
Re: Problem beim Auslesen mit mehreren Ebenen
*edit*
ups. falsch verstanden ... ich les gleich nochmal in Ruhe alles genauer durch [edit]
Delphi-Quellcode:
Hab hier grad kein Delphi und sonst seh ich auch erstmal nichts,
for CustomerCount := 0 to newCustomer.length - 1 do
aber sicher daß .Length stimmt? (ich hätte eher sowas wie .Count erwartet :gruebel: ) |
Re: Problem beim Auslesen mit mehreren Ebenen
Nee, das Length stimmt schon. Es gibt kein Count.
Edit: Danke himitsu, ich habe es gerade selber gelöst. Die While-Schleife sieht jetzt so aus :
Delphi-Quellcode:
while subNode <> nil do
begin newFieldsNames := newFieldsNames + subNode.nodeName + ', '; newFieldsValue := newFieldsValue + subNode.Text + ', '; subNode := subNode.nextSibling; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz