Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Problem mit xpparser.pas Unit (https://www.delphipraxis.net/129386-problem-mit-xpparser-pas-unit.html)

toyoman 18. Feb 2009 08:45


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;

Relicted 18. Feb 2009 08:53

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

toyoman 18. Feb 2009 08:59

Re: Problem mit xpparser.pas Unit
 
Zitat:

Zitat von Relicted
Moin,

es wäre ganz nett zu wissen wo genau der Fehler auftritt (Zeile).
So müsste man jetzt seine :glaskugel: befragen :-)

Gruß
Reli

also wenn ich ANHALTEN anklicke bei der Exception bleibt er auf dieser Zeile stehen (markiert):
raise EXpParserError.CreateError(FFilter.Line,

tja was sagt deine glaskugel nun? ;)

nuclearping 18. Feb 2009 09:08

Re: Problem mit xpparser.pas Unit
 
Menü Ansicht -> Debug-Fenster -> Aufruf-Stack

jaenicke 18. Feb 2009 09:09

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.

Assertor 18. Feb 2009 09:11

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 (http://tpxmlpartner.cvs.sourceforge.....1&view=markup).

Die Projektseite dazu findest Du bei SourceForge: http://sourceforge.net/projects/tpxmlpartner

Zitat:

Zitat von toyoman
also wenn ich ANHALTEN anklicke bei der Exception bleibt er auf dieser Zeile stehen (markiert):
raise EXpParserError.CreateError(FFilter.Line,

Diese Exception kommt in o.g. Datei ~ 50 mal vor - aber zum Glück hast Du ja den Code oben gepostet. Wenn ich mir ReadNameToken so ansehe, wird die Exception nur ausgelöst, wenn der Name des Tokens ungültige Zeichen enthält.

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:

http://sourceforge.net/tracker/index...08&atid=626034
oder auch
http://sourceforge.net/forum/forum.p...orum_id=346671

Das sind ja schonmal bekannte Probleme mit D2007.

Probier sonst mal den D2009 Port von Lasse:
http://www.songbeamer.com/delphi/

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

toyoman 18. Feb 2009 09:14

Re: Problem mit xpparser.pas Unit
 
Zitat:

Zitat von nuclearping
Menü Ansicht -> Debug-Fenster -> Aufruf-Stack

der sieht so aus, hilft das was?

: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

toyoman 18. Feb 2009 09:15

Re: Problem mit xpparser.pas Unit
 
Zitat:

Zitat von Assertor
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 (http://tpxmlpartner.cvs.sourceforge.....1&view=markup).

Die Projektseite dazu findest Du bei SourceForge: http://sourceforge.net/projects/tpxmlpartner

Zitat:

Zitat von toyoman
also wenn ich ANHALTEN anklicke bei der Exception bleibt er auf dieser Zeile stehen (markiert):
raise EXpParserError.CreateError(FFilter.Line,

Diese Exception kommt in o.g. Datei ~ 50 mal vor - aber zum Glück hast Du ja den Code oben gepostet. Wenn ich mir ReadNameToken so ansehe, wird die Exception nur ausgelöst, wenn der Name des Tokens ungültige Zeichen enthält.

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:

http://sourceforge.net/tracker/index...08&atid=626034
oder auch
http://sourceforge.net/forum/forum.p...orum_id=346671

Das sind ja schonmal bekannte Probleme mit D2007.

Probier sonst mal den D2009 Port von Lasse:
http://www.songbeamer.com/delphi/

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

wow ihr überhäuft mich hier mit infos... danke! ich schau mir das jetzt in ruhe an... ;)

toyoman 18. Feb 2009 10:22

Re: Problem mit xpparser.pas Unit
 
Zitat:

Zitat von toyoman
Zitat:

Zitat von Assertor
Hi toyoman,


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:

http://sourceforge.net/tracker/index...08&atid=626034
Gruß Assertor

wow ihr überhäuft mich hier mit infos... danke! ich schau mir das jetzt in ruhe an... ;)

dieser link oben hat mir schon sehr geholfen. es war tatsächlich ein bug. ich musste die funktion:
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 ;)

Assertor 18. Feb 2009 10:22

Re: Problem mit xpparser.pas Unit
 
Hi,

Zitat:

Zitat von toyoman
dieser link oben hat mir schon sehr geholfen. es war tatsächlich ein bug. ich musste die funktion:
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 ;)

Freut mich, helfen zu können!

Gruß Assertor


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz