Hi
ich hab hier nen Fehler den ich einfach nicht verstehe -.-
Ich versuche eine
XML-Datei zu parsen, mit Xdom_4_1.
Das mache ich so:
Delphi-Quellcode:
var
MeineXML: String;
FInputSource: TXMLInputSource;
FDoc: TDomDocument;
XmlToDomParser1: TXmlToDomParser;
DomImplementation1: TDomImplementation;
begin
{...}
XmlToDomParser1 := TXmlToDomParser.Create(NIL);
DomImplementation1 :=TDomImplementation.Create(NIL);
XmlToDomParser1.DOMImpl := DomImplementation1;
FInputSource := TXMLInputSource.Create(MeineXML, '', '', 1024, False, 0, 0, 0, 0, 1);
FDoc := XmlToDomParser1.Parse(FInputSource); // Fehler!
FInputSource.Free;
{...}
end;
Hat auch wunderbar geklappt, nur jetzt will er irgendwie nicht mehr :-/
In der gekennzeichneten Zeile kommt ein Fehler (Parse Error).
Ich habe den Fehler zurückverfolgt und gesehen das dieser Code-Abschnitt dafür verantwortlich ist:
Delphi-Quellcode:
// '?>':
if (CurrentCharInfo.CodePoint = $003F) // '?'
and Match('>') then begin // '>'
ResetPosition := Position - NextCharInfo.Size;
end else
Result := False;
Hier springt er auf den else-Teil und gibt somit false zurück auf Grund dessen dann die Fehlermeldung geworfen wird.
Das komische daran ist... beide Ausdrücke in der Bedingung liefern True zurück!
Ich habe nen Breakpoint auf die If-Anweisung gelegt und dann die beiden Ausdrücke ausgewertet.
In CurrentCharInfo.CodePoint steht 63 drinn, $003F ist auch 63 -> True
Match ist eine Funktion, welche auch True liefert (ich bin mit dem Debugger durchgegangen).
Wenn ich den Code so umschreibe:
Delphi-Quellcode:
// '?>':
if (CurrentCharInfo.CodePoint = $003F) then // '?'
if Match('>') then begin // '>'
ResetPosition := Position - NextCharInfo.Size;
end else
Result := False;
springt er auch ganz normal wie erwartet zum begin...end, allerdings wird dannach irgendwann eine
AV angezeigt!
Die
XML-Dateien, welche ich parse, haben einen gültigen Kopf:
Zitat:
<?
xml version="1.0" encoding="UTF-8"?>
und nach '?>' wird ja gesucht.
Wie gesagt, früher gings, jetzt aus irgendeinem Grund nichtmehr...
An was kann das liegen?
mfg.Dominik