Zum Inhalt springen

HTML-Datei mit Java parsen


erdnah

Empfohlene Beiträge

Hallo,

ich habe folgendes HTML-Dokument:

... viel HTML ...


       <tr bgcolor="#FFFFFF">

           <td class=text>Irgendein String mit Buchstaben Zahlen und Leerzeichen</td>

           <td class=text>Noch so ein String</td>

           <td class=text>1,7</td>

           <td class=text>01.03.2005</td>

           <td class=text></td>

           <td class=text></td>

           <td class=text></td>

           <td class=text></td>

       </tr>


       <tr bgcolor="#FFFFFF">

           <td class=text>Irgendein String mit Buchstaben Zahlen und Leerzeichen</td>

           <td class=text>Noch so ein String</td>

           <td class=text>1,7</td>

           <td class=text>02.03.2005</td>

           <td class=text></td>

           <td class=text></td>

           <td class=text></td>

           <td class=text></td>

       </tr>

           <tr> <th colspan="8" bgcolor="#FFFFFF" align="left"> </th></tr><tr> <th id="6659b87c23a6a4f822195720afd9ecf900" colspan="8" bgcolor="#F7F7F7" align="left"><a href="javascript: kursopen('http://www.foo.de/index.php?ebene=6659b87c23a6a4f822195720afd9ecf900', 'Blubb')">Blubb</a> (Blaaa 8)</th></tr>

       <tr bgcolor="#FFFFFF">

           <td class=text>Irgendein String mit Buchstaben Zahlen und Leerzeichen</td>

           <td class=text>Noch so ein String</td>

           <td class=text>1,9</td>

           <td class=text>10.03.2005</td>

           <td class=text></td>

           <td class=text></td>

           <td class=text></td>

           <td class=text></td>

       </tr>


... noch mehr HTML ...
Wie ihr sehr, wiederholt sich ständig, d.h. 0 bis n Mal, so genau weiß ich das nicht, folgender Abschnitt:
       <tr bgcolor="#FFFFFF">

           <td class=text>Irgendein String mit Buchstaben Zahlen und Leerzeichen</td>

           <td class=text>Noch so ein String</td>

           <td class=text>1,7</td>

           <td class=text>01.03.2005</td>

           <td class=text></td>

           <td class=text></td>

           <td class=text></td>

           <td class=text></td>

       </tr>

Aus all diesen Blöcken würde ich gerne ein Array erhalten, mit folgenden Feldern (pro Zeile):

- Irgendein String mit Buchstaben Zahlen und Leerzeichen

- Noch so ein String

- 1,7 (d.h. die Zahl)

- 01.03.2005

- (5. Spalte)

- (6. Spalte)

- (7. Spalte)

- (8. Spalte)

Ich hoffe dass mir jemand von euch helfen kann!? Falls ihr weitere Infos braucht, helfe ich so schnell es geht weiter.

Gruß,

erdnah

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wo genau hast du deine Probleme?

Hast du dich schon mit XML-Parsern beschäftigt? Eine Alternative dazu wären vllt. auch Reguläre Ausdrücke. Ersteres nimmt dir aber schon ziemlich viel Arbeit ab.

Bleibt die Reihenfolge der Zelleninhalte immer die gleiche? Also erst die beiden Zeichenketten, dann an 3. und 4. Position die Zahl und das Datum etc.? (Wenn da eine strikte Ordnung drin ist, sollte das wohl alles kein Problem sein.)

Was ist mit dem 8-spaltigen TH-Tag in deinem Beispiel? Ist das eine einmalige/häufigere und regelmäßige/zufällige Ausnahme zwischen den Datenzeilen?

Auch ganz wichtig: Ist das HTML-Dokument, welches du parsen möchtest XML-konform oder kommt da auch mal statt <br/> das nicht XHTML-gerechte und doch sehr beliebte <br>-Tag vor (nur mal so als Beispiel; genauso beliebt sind wohl auch <p>-Tags für Absätze, die nicht wieder mit </p> geschlossen werden)?

Ich würde dir erstmal raten, mit einem XML-Parser an die Sache ran zu gehen. Das ist recht einfach. (Allerdings musst du dich in diesem Fall wohl dringend mit der letzten meiner Fragen beschäftigen. Ein XML-Parser parst eben nur XML und keine halbfertigen "dahingerotzten" Kinder-HTML-Seiten. Entschuldigt bitte den Ausdruck!)

Beste Grüße aus dem Norden.

Arvid.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hier noch ein Link zur Insel bezüglich deines Anliegens: HTML-Dokumente mit JTidy und cyberneko einlesen.

Wird dir sicher auch helfen können.

Falls deine HTML-Dokumente tatsächlich (Zitat von der Java-Insel: ) "nicht ganz XML-rein sind, gibt es mit JTidy, eine freie Bibliothek, die HTML-Dokumente einliest, Fehler intern (soweit möglich) korrigiert und als ordentlichen DOM-Baum repräsentiert."

Also definitiv eines Blickes Wert.

Tschuuß.

Arvid.

PS: Verzeiht diesen neuen Post, konnte nicht editieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, mit XML-Parsern habe ich aus php heraus schon einiges gemacht. Jedoch ist die Seite bei weitem nicht XML-konform, oblgeich sie nicht "von Kindern" erstellt worden ist... :hells:

Vielleicht sollte ich einfach Zeile für Zeile durchlaufen und immer dann, wenn ich auf ein

<tr bgcolor="#FFFFFF">

pro Zeile stoße, aufmerksam werden und die nächsten 8 Zeilen einlesen und dann noch ein wenig zurecht schneiden.

Na ja, heute Nachmittag oder am Wochenende werde ich es mal testen. Grundsätzlich wäre XML natürlich schöner, aber das wird sicherlich nichts werden. Alles etwas dämlich, aber was soll man machen, wenn es keine ordentliche Schnittstelle gibt..!? (rhetorische Frage) ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

...Dann probier es doch wirklich mal mit JTidy aus. Ich persönlich hab damit noch nicht gearbeitet (da bisher nicht nötig gewesen), aber ich bin überzeugt, dass es seinen Dienst gut macht. Du bist ja schließlich nicht der erste Entwickler der Geschichte, der mit genau diesem Problem zu schaffen hat.... :)

...Mit dieser "X-Zeilen-einlesen-zählen-zurechtschneiden-und-umwürfeln"-Umsetzung wäre ich vorsichtig. Das klingt arg nach Unflexibilität und Fehleranfälligkeit. Damit fliegt man sicherlich ganz schnell mal auf die Fre... Nahrungsaufnahmeeinheit.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Warum machst du das Dokument nicht einfach XHTML konform ? Dann hast du keine Probleme mehr und kannst mit XML-Bäumen arbeiten.

... ich darf auch nicht in eine Bank gehen und meinen Kontostand ändern, wenn mir das aktuelle Erscheinungsbild nicht gefällt. SCNR

@ar-sch.de: Es bleibt sich doch gleich. Egal ob ich Zeile für Zeile einlese oder ob ich JTidy oder CyberNeko, d.h. DOM zum XML parsen, verwende - sobald die Struktur geändert wird, muss ich Anpassungen vornehmen :-/

Ich glaube fast, dass es keine richtig elegante Lösung gibt. Kann es ja auch gar nicht, da ich auf die Datenquelle und evt. Änderungen keinen richtigen Einfluss nehmen kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bleibt die Frage nach der Übersichtlichkeit.

Eine DOM-Struktur anzupassen erscheint mir etwas leichter als ein solches "Gefrickel" anzupassen, bei dem irgendwelche Vorkommnise von Zeilen und Zeichenketten gezählt und zurecht gefriemelt werden und evtl. sogar noch andere Sachen gemacht werden müssen (wenn nicht jetzt, dann möglicherweise später mal)....

Ich will dir ja nix unterstellen, vielleicht hast du ja schon ein tolles Konzept, mit dem auch Anpassungen und Erweiterungen jeglicher Art sehr einfach und übersichtlich sind und ergo schnell gemacht werden können.

Aber bei fertigen Parsern werde ich das Rad doch nicht neu erfinden wollen. Zumal es so viel bequemer ist...

Zumindest ausprobieren würde ich einen der HTML-Parser.

Link zu diesem Kommentar
Auf anderen Seiten teilen

... ich darf auch nicht in eine Bank gehen und meinen Kontostand ändern, wenn mir das aktuelle Erscheinungsbild nicht gefällt. SCNR

Das hat doch damit nichts zu tun.

Fakt ist:

Wenn man eine Technik benutzt, dann hält man sich an die Standarts welche von dieser Technik vorgegeben werden. Und zwar nach Möglichkeit an einen aktuellen Standart. Ebenso sollte man sich eine sinnvolle Realisierung einer Anforderung überlegen, und HTML zu parsen ist imho absolut nicht sinnvoll, da es ein riesiges Gefrickel ist den HTML-Code auseinander zu pflücken.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn man eine Technik benutzt, dann hält man sich an die Standarts welche von dieser Technik vorgegeben werden.
Kilometerweit offtopic, aber die Technik 'Rechtschreibung' gibt immer noch vor, dass Standard mit 'd' geschrieben wird ;)

HTML zu parsen ist imho absolut nicht sinnvoll, da es ein riesiges Gefrickel ist den HTML-Code auseinander zu pflücken.
Das hängt immer stark vom Aufbau der HTML Datei selber ab. Es kann durchaus Sinn machen, wenn keine anderen Schnittstellen auf das System zur Verfügung stehen auf ein HTML Parsing zurückzugreifen um automatisiert an bestimmte Daten zu kommen.
Link zu diesem Kommentar
Auf anderen Seiten teilen

... wenn keine anderen Schnittstellen auf das System zur Verfügung stehen auf ein HTML Parsing zurückzugreifen um automatisiert an bestimmte Daten zu kommen.

Ok, mein Vergleich mit der Bank traf es nicht ganz so gut wie perdis Beschreibung. Die Aussage, dass die Datenquelle nicht beeinflussbar ist, kam aber in beiden Fällen deutlich rüber.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast
Dieses Thema wurde nun für weitere Antworten gesperrt.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...