AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Eigener HTML-Parser/Auslesen von HTML-Tables
Thema durchsuchen
Ansicht
Themen-Optionen

Eigener HTML-Parser/Auslesen von HTML-Tables

Ein Thema von NiceWeather · begonnen am 12. Aug 2009 · letzter Beitrag vom 13. Aug 2009
 
NiceWeather

Registriert seit: 12. Aug 2009
2 Beiträge
 
#1

Eigener HTML-Parser/Auslesen von HTML-Tables

  Alt 12. Aug 2009, 15:18
Hallo zusammen,

habe ein Logik-Problem und hoffe es kann mir jemand weiterhelfen:

Eine Funktion soll eine HTML-Tabelle als string zurückliefern:

Folgende Deklaration der Funktion:
function GetHTMLTable (AUrl: string; ATableID: integer): string; Der Parameter ATableID ist die Tabelle, die zurückgeliefert werden soll.

Folgende Variablen:
Delphi-Quellcode:
var
  cResult: string; //Der Rükgabewert
  cSourceCode: string;
  nTableStartPos: integer;
  nTableEndPos: integer;
  nOffSet: integer;
  aTableCoordinatesArray: Array of TTableCoordinates; //TTableCoordinates ist ein Record mit den beiden Felden TableStartPos und TableEndPos
  nTableCoordinatesArraySize: integer;
  nI: integer; //Schleifenvariable
Zunächst die Initialisierung einiger Variablen:

Delphi-Quellcode:
  cSourceCode := GetSourceCode(AUrl); //GetSourceCode ist eine eigene Funktion, die mittels TIdHTTP den Sourcecode einer Website liefert. AUrl wurde als Argument an die Funktion geliefert.

  nTableStartPos := Pos(tblStartIdentifier, cSourceCode); //defniert das erste Vorkommen von tblStartIdentifier (String-Konstante= '<table')
  nTableEndPos := Pos(tblEndIdentifier, cSourceCode); //defniert das erste Vorkommen von tblEndIdentifier (String-Konstante= '</table>')
  nTableCoordinatesArraySize := 0;
Dann wird das Array aTableCoordinatesArray mit allen vorkommenden Positionen von '<table' in cSourceCode gefüttert:

Delphi-Quellcode:
  while nTableStartPos > 0 do
    begin
      Inc(nTableCoordinatesArraySize); //Größe des Arrays definieren
      SetLength(aTableCoordinatesArray, nTableCoordinatesArraySize); //Größe des Arrays definieren
      aTableCoordinatesArray[nTableCoordinatesArraySize-1].TableStartPos := nTableStartPos;
      nOffSet := nTableStartPos + Length(tblStartIdentifier); //Offset hinter die letzte gefundene Position setzen
      nTableStartPos := PosEx(tblStartIdentifier, cSourceCode, nOffSet); //schauen, ob's ein weiteres '<table' gibt
    end;
So weit so gut. Es fehlen die Positionen der End-Tags. Die werden folgendermaßen eingelesen:

Delphi-Quellcode:
  for nI := 0 to High(aTableCoordinatesArray) do
    begin
      aTableCoordinatesArray[nI].TableEndPos := nTableEndPos;
      nOffSet := nTableEndPos + Length(tblEndIdentifier); //Offset hinter die letzte gefundene Position setzen
      nTableEndPos := PosEx(tblEndIdentifier, cSourceCode, nOffSet); //nach dem nächsten '</table>' schauen. Es wird angenommen, dass cSourceCode korrekt ist und genauso viele EndTags, wie StartTags vorhanden sind.
    end;
Vorweg: Der Ansatz war, alle vorkommenden Taellen im Quelltext zu kennen, um zu wissen, wo die Table anfängt und wo sie aufhört (Stichwort: Verschachtelte Tables).

Genau da liegt aber mein Problem, denn der End-Tag von
aTableCoordinatesArray[nI].TableStartPos ist nicht unbedingt
Delphi-Quellcode:
 
aTableCoordinatesArray[nI].TableEndPos
Was die Definition des Rückgabewertes betrifft: Das ist nicht das Problem an sich.
Es fällt mir lediglich schwer, zuzuordnen welcher End-Tag zu welchem Start-Tag gehört.

Habe mir schon verschachtelte for-Schleifen überlegt, was allerdings alles nicht hinhaut.

Habt ihr eine Idee? Würdet ihr vom Ansatz her überhaupt so wie ich beginnen?

Vorab vielen Dank für euren Input!
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 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