Slyh: HTML Scanner

Beitrag lesen

Hallo,

Ich bin noch ein Java-Anfänger und soll mit einem Java Programm bestimmte Daten (Textstellen) aus einem HTML-File raussuchen.

Wenn du genau weißt wie die HTML-Datei aussieht und wenn diese sich
in der Zeit, in der dein Programm eingesetzt werden soll, nicht stark
ändern wird, kannst du sicher etwas über String-Vergleiche machen, wie
hier im Thread ja bereits angesprochen wurde.

Wenn man nicht garantieren kann, daß die HTML-Datei immer gleich bleibt
oder mehrere HTML-Dateien mit verschiedener Struktur bearbeitet werden
sollen, macht ein String-Vergleich nur wenig Sinn. (Von <script>-Bereichen,
Kommentaren, Literalen usw. möchte ich gar nicht erst anfangen.)

Verwende stattdessen einen Parser, der entweder Event-gesteuert ist oder
der dir einen DOM-Baum baut. Hier wird die HTML-Datei nach einer
Grammatik eingelesen und dir zugänglich gemacht. Im Falle einer
Event-gesteuerten Parsers wird bspw. für jedes öffnende Tag eine
Methode aufgerufen, in der die abfragen kannst, ob das Tag die von
dir geforderten Eigenschaften ("<table>", "<tr>", "<td>") hat. Du
kannst dir dann den aktuellen Zustand ("Ich bin gerade in dem 5. <tr>
der 3. Tabelle im Dokument") merken. Du kannst dir aber auch einen
einfachen DOM-Baum daraus generieren, den du anschließend abarbeitest,
z.B. indem du ihn durchläufst, nach <table>-Tags suchst, darin nach
<tr>-Tags und darin wiederum nach <td>-Tags, die dann den von dir
gewünschten Text enhalten.

Ein Parser für HTML ist in Java seit Version 1.2 eingebaut. Der
unterstützt meines Wissens HTML 3.2. Das sollte in der Regel aber
ausreichend sein. Wie empfindlich der Parser bei invalidem HTML-
Code ist, weiß ich leider nicht. Aber schau mal in das Package
javax.swing.text.html.

Zwei Beispiele wie man mit Java ein HTML-Dokument parst, findest du
im Java-Almanac unter http://javaalmanac.com/egs/javax.swing.text.html/pkg.html.

Wenn das nichts taugt, kannst du bspw. auch mal nach JavaCC
schauen. Das enthält eine HTML-Grammatik. (JavaCC ist aber sehr
empfindlich bei invalidem Code.)
Ansonten habe ich auf die Schnelle noch http://jerichohtml.sourceforge.net/
gefunden. Klingt so, als tauge das was...

Außer in Spezialfällen würde ich von direkten String-Vergleichen
vehement abraten.

Gruß
Slyh