![]() |
Problem mit xpparser.pas Unit
hallo jungens
ich muss ein altes projekt in delphi 2007 zum laufen bringen. in diesem projekt wird eine xpparser.pas verwendet. so wie es ausschaut hat das Ding was mit XML am hut. da ich mich damit nicht auskenne und beim kompilieren immer folgende fehlermeldung erhalte wollte ich fragen ob sich jemand damit auskennt und ev. eine beschreibung oder ähnliches hat warum das ding unter delphi 2007 nicht mehr funzt: Erste Gelegenheit für Exception bei $7C812A5B. Exception-Klasse EXpParserError mit Meldung 'Invalid XML name: ' ''. Prozess Reports.exe (4844) Der Fehler tritt anscheinend in folgender Funktion auf:
Delphi-Quellcode:
function TXpParser.ReadNameToken(aValFirst : Boolean) : DOMString;
var TempChar : DOMChar; {!!.52} First : Boolean; ResultLen : Integer; {!!.52} CurrLen : Integer; {!!.52} begin if TryRead(Xpc_ParamEntity) then begin {!!.52 - Start} ParseParameterEntityRef(True, False); SkipWhiteSpace(True); end; {!!.52 - End} First := aValFirst; Result := ''; CurrLen := 0; {!!.52 - Start} ResultLen := 20; SetLength(Result, ResultLen); {!!.52 - End} while True do begin TempChar := ReadChar(False); if (TempChar = '%') or (TempChar = '<') or (TempChar = '>') or (TempChar = '&') or (TempChar = ',') or (TempChar = '|') or (TempChar = '*') or (TempChar = '+') or (TempChar = '?') or (TempChar = ')') or (TempChar = '=') or (TempChar = #39) or (TempChar = '"') or (TempChar = '[') or (TempChar = ' ') or (TempChar = #9) or (TempChar = #$0A) or (TempChar = #$0D) or (TempChar = ';') or (TempChar = '/') or (TempChar = '') or {!!.51}{!!.52} (TempChar = #1) then {!!.52} Break else if XpValidNameChar(First, TempChar) then begin {!!.52 - Start} if (CurrLen + 2 > ResultLen) then begin ResultLen := ResultLen * 2; SetLength(Result, ResultLen); end; SkipChar; Inc(CurrLen); Result[CurrLen] := TempChar; end else {!!.52 - End} raise EXpParserError.CreateError(FFilter.Line, FFilter.LinePos, FFilter.URL, sInvalidName + QuotedStr(TempChar)); First := False; end; SetLength(Result, CurrLen); {!!.52} end; |
Re: Problem mit xpparser.pas Unit
Moin,
es wäre ganz nett zu wissen wo genau der Fehler auftritt (Zeile). So müsste man jetzt seine :glaskugel: befragen :-) Gruß Reli |
Re: Problem mit xpparser.pas Unit
Zitat:
raise EXpParserError.CreateError(FFilter.Line, tja was sagt deine glaskugel nun? ;) |
Re: Problem mit xpparser.pas Unit
Menü Ansicht -> Debug-Fenster -> Aufruf-Stack
|
Re: Problem mit xpparser.pas Unit
Dann gibt XpValidNameChar False zurück, warum musst du einmal schauen.
Aber wenn eine Exception bereits angezeigt wird, ist es ja schon zu spät, du müsstest vorher Haltepunkte setzen. Nur dann siehst du normalerweise, wo die Exception auftritt. In diesem Fall sieht man es auch so sofort, weil sie ja direkt ausgelöst wird. // EDIT: Nebenbei sind bei diesem Exceptiontyp (EXpParserError) ja noch weitere Informationen enthalten, wenn du diese (wie offenbar vorgesehen) mit try..except abfängst und auswertest. |
Re: Problem mit xpparser.pas Unit
Hi toyoman,
das "Ding" sollte einen Lizenz-Header haben, also in der Datei XpParser.pas sollte etwas über den Hersteller stehen. Es dürfte sich dabei um die alte TurboPower XMLPartner Library handeln ( ![]() Die Projektseite dazu findest Du bei SourceForge: ![]() Zitat:
Wenn ich nun nach der Suche von XpParser.pas in Google die SourceForge-Seite öffne und auf Suchen im Forum bzw. im Tracker gehe, finde ich sehr viele Bugs und auch sowas: ![]() oder auch ![]() Das sind ja schonmal bekannte Probleme mit D2007. Probier sonst mal den D2009 Port von Lasse: ![]() Dort findest Du eine Version des XMLPartner die auch auf D2009 geht - ich weiß es geht hier um D2007, aber vielleicht hat Sebastian ja einige Bugfixes eingebaut... Andernfalls bleibt wohl nichts anderes den Code selbst zu fixen bzw. eine andere XML Komponente zu verwenden. Gruß Assertor |
Re: Problem mit xpparser.pas Unit
Zitat:
:7c812a5b kernel32.RaiseException + 0x52 XpParser.TXpParser.ReadNameToken(???) XpParser.TXpParser.ParsePIEx XpParser.TXpParser.ParseMisc XpParser.TXpParser.ParseProlog XpParser.TXpParser.ParseDocument XpParser.TXpParser.ParsePrim XpParser.TXpParser.ParseDataSource(???) ReportDef.TReportScript.ReadConfig(???,'H:\Project s\Delphi\GUI\DbeReports\Reports.xml','H:\Projects\ Delphi\GUI\DbeReports\Reports\') GUI.TListenForm.LoadReports(???) GUI.TListenForm.Init(???) :0049bcd6 TControl.WndProc + $2BE :0049fcd0 TWinControl.WndProc + $500 :004824a8 TCustomForm.WndProc + $558 :0049f3f7 TWinControl.MainWndProc + $2F :0043499a StdWndProc + $16 :7e418734 USER32.GetDC + 0x6d :7e418816 ; C:\WINDOWS\system32\USER32.dll :7e4189cd ; C:\WINDOWS\system32\USER32.dll :7e4196c7 USER32.DispatchMessageA + 0xf |
Re: Problem mit xpparser.pas Unit
Zitat:
|
Re: Problem mit xpparser.pas Unit
Zitat:
TXpInCharFilter.ReadChar wie im Link beschrieben anpassen. vielen dank für diesen super tip. jetzt hab ich zwar noch weitere probleme, aber die krieg ich hoffentlich auch noch in den griff ;) |
Re: Problem mit xpparser.pas Unit
Hi,
Zitat:
Gruß Assertor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:35 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