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
 
#3

Re: Eigener HTML-Parser/Auslesen von HTML-Tables

  Alt 13. Aug 2009, 15:46
Danke! 8)

Ging wirklich nicht wie ich ursprünglich wollte (habs auch nochmal kompliziert mit Sortierung, etc. versucht).

Am einfachsten ging es dann so:

Delphi-Quellcode:
function THTMLTables.GetHTMLTable(AUrl: string; ATableID: Integer): string;
var
  cResult: string; //Rückgabewert
  cSourceCode: string; //HTML-Quelltext
  nTablesCount: integer; //Anzahl vorhandener Tabellen im cSourceCode
  nStartOffSet: integer; //Da fang ich an nach '<table' zu suchen
  nEndOffSet: integer; //Da fang ich an nach '</table>' zu suchen
  nTableStartPos: integer; //Da fängt meine Table an
  nTableEndPos: integer; //...und da hört sie auf
  nNextTablePos: integer; //Start-Position der jeweils nächsten Table
  nResultLength: integer; //Anzahl der Zeichen, die cResult enthält.
  nI: integer;

begin

  cSourceCode := GetSourceCode(AUrl); //Eigene Funktion, die mittels TIdHTTP, den Quelltext ausgibt
  nTablesCount := TablesCount(cSourceCode, True); //Eigene Funktion zum zählen der Tables im Quelltext - Das boolsche Argument gibt an, ob der Quelltext validiert werden soll (d.h. wenn true und genausoviele Table-Start-Tags wie End-Tags gibt's ein Ergebnis, ansonsten 0)

  //Weiter mit der Initialisierung von Variablen
  nStartOffSet := 1;
  nTableStartPos := 1;
  nTableEndPos := 1;
  nNextTablePos := 1;


  if (ATableID > 0) and
     (ATableID <= nTablesCount) then
    begin

      //Findet die Position von ATableID (1 = Erster Table-Tag, etc.)
      for nI := 0 to ATableID-1 do
          begin
            nTableStartPos := PosEx(tblStartIdentifier, cSourceCode, nStartOffSet);
            nStartOffSet := nTableStartPos + Length(tblStartIdentifier);
          end;

      //Findet den Table-End-Tag
      nEndOffSet := nStartOffSet;
      while (nNextTablePos <= nTableEndPos) and
            (nNextTablePos <> 0) do
        begin
          nNextTablePos := PosEx(tblStartIdentifier, cSourceCode, nStartOffSet);
          nStartOffSet := nNextTablePos + Length(tblStartIdentifier);
          nTableEndPos := PosEx(tblEndIdentifier, cSourceCode, nEndOffSet);
          nEndOffSet := nTableEndPos + Length(tblEndIdentifier);
        end;

      nResultLength := nTableEndPos - nTableStartPos + Length(tblEndIdentifier);
      cResult := Copy(cSourceCode, nTableStartPos, nResultLength);

    end;

  Result := cResult;

end;
Wer möchte kann gerne Kritik an meinem Code üben! Bin immer für "Optimierungen" zu haben.
  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:52 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