![]() |
Parse Error
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:
Hat auch wunderbar geklappt, nur jetzt will er irgendwie nicht mehr :-/
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; 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:
Hier springt er auf den else-Teil und gibt somit false zurück auf Grund dessen dann die Fehlermeldung geworfen wird.
// '?>':
if (CurrentCharInfo.CodePoint = $003F) // '?' and Match('>') then begin // '>' ResetPosition := Position - NextCharInfo.Size; end else Result := False; 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:
springt er auch ganz normal wie erwartet zum begin...end, allerdings wird dannach irgendwann eine AV angezeigt!
// '?>':
if (CurrentCharInfo.CodePoint = $003F) then // '?' if Match('>') then begin // '>' ResetPosition := Position - NextCharInfo.Size; end else Result := False; Die XML-Dateien, welche ich parse, haben einen gültigen Kopf: Zitat:
Wie gesagt, früher gings, jetzt aus irgendeinem Grund nichtmehr... An was kann das liegen? mfg.Dominik |
Re: Parse Error
Hallo
Also ich sehe mit dem, was du uns als Info gegeben hast, eigentlich kein Problem... Kleine Idee: Entferne mal die Kommentare hier ... :roll:
Delphi-Quellcode:
oder andere Idee: ist da eventuell eine "With-Anweisung" im Spiel (Name-Match?)// '?>': if (CurrentCharInfo.CodePoint = $003F) // '?' and Match('>') then begin // '>' ResetPosition := Position - NextCharInfo.Size; end else Result := False; |
Re: Parse Error
Hallo
bins nochmal... :) Zitat:
|
Re: Parse Error
Delphi-Quellcode:
wäre eindeutiger ;)
if ((CurrentCharInfo.CodePoint = $003F) and Match('>')) then begin...
|
Re: Parse Error
Hallo
@progman: ich glaube wir denken in dieselbe richtung ... kann es sein daß der kommentar und zeilenwechsel innerhalb der Bedingung zu problemen führt...? |
Re: Parse Error
ich vermute, dass da der Kommentar was durcheinanderbringt
|
Re: Parse Error
diese Funktion ist in der XDom_4_1.pas
Zitat:
Änderungen hab ich im Projekt hunderte gemacht, allerdings nichts was mit XML zu tun hat (und schon garnichts in der XDom_4_1). Und das mit den Klammern hab ich ausprobiert -> nÜx. |
Re: Parse Error
ähh...lol...hab die Unit XDom_4_1 mal ganz an den anfang der Uses-Liste geschrieben, und geht!
sachen gibts -.- danke an alle die sich bemüht haben :cheers: |
Re: Parse Error
Aha, also ein NameMatch!! zwar nicht verursacht durch "with" sondern durch die Reihenfolge von eingebundenen units.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 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 by Thomas Breitkreuz