Hi
ich bin mir nicht sicher ob mein Thema in dieses Forum passt, aber ich versuch es einfach mal.
Dafür sind wir da...
Ich bin noch ein Java-Anfänger und soll mit einem Java Programm bestimmte Daten (Textstellen) aus einem HTML-File raussuchen.
Also nur Text? So wie das Text-Browser (z.B. Lynx) machen?
Jeoch hab ich keine Ahnung wie ich ein HTML-Dokument was zig Zeilen lang ist struktieriert durchsuchen soll.
Ja, das ist schwer, vor allem, wenn da noch so etwas wie JS oder CSS drin ist...
Es gibt ja schon diverse HTML-Scanner, aber die scheinen auch alle nicht zu funktionieren.
Komischerweise muss es aber gehen, denn Lynx schafft es ja auch.
Hat hier jemand schon mal so was ähnliches gemacht und kann mir weiterhelfen wie ich da am besten ranngehe?
Eins vorweg - ich habe keine Ahnung von Java, aber ich kann dir evtl die Vorgehensweise sagen. Ich bitte hierbei dann auch um Verbesserung...
Nun ja, da du nur Text haben möchtest, würde ich zuerst einmal das HTML-Dokument einlesen, alle HTML-Tags entfernen. Hierbei kommt schon das erste Problem auf, denn was ist mit <script></script> und <style></style>? Da drin sind Sachen, die sich nicht so leicht (evtl sogar gar nicht) von reinem Text untercheiden lassen. Deshalb muss das gleich von vorne herein gelöst werden, ein neuer Ansatz muss her:
1. Zuerst löscht du alles was zwischen <head>...</head> und </head>...</body> drin ist, damit wären alle Skripts und Stylesheets entfernt, denn die befinden sich (fast!) immer im <head> oder zwischen </head> und <body>.
2. Dann löscht du die restlichen HTML-Tags. Dabei solltest du dem JAVA-Programm nicht alle HTML-Elemente einprogrammieren, eher schon zuerst alles zwischen < > löschen, und dann die beiden Klammern selber löschen (wie fastix schon beschrieben hat).
Es kann aber vorkommen, dass eben < > als Text vorkommt und nicht als Entity geschrieben wurde. Deshalb sollten es schon valide HTML-Seiten sein, die du Scannen willst.
Den Vorteil, den diese Vorgehensweise eindeutig hat, ist, dass wirklich NUR der Text ausgegeben werden kann, und keine HTML-Elemente drin sind.
Der große Nachteil, ist, dass weder Anordnung (sei es mit Tabellen oder CSS) nicht berücksichtigt wird. Du bekommst also nur den Text, so wie er im HTML-Dokument aufgeführt ist, untereinander ausgegeben (Was aber auch wieder als Vorteil gewertet werden kann).
Ein Problem gäbe es aber noch: Entities! Zum Schluss wirst du (bei validen Seiten) kein ä, ö, ü oder ß sehen, sondern ä, ö, ü und ß. Ob du das willst, bleibt dir überlassen. Es gibt hunderte solcher Entities, und wenn du sie alle deinem JAVA-Programm einprogrammieren willst, dann mach das, aber es wird eine Riesenarbeit.
Soweit wäre das meine Vorgehensweise. Natürlich ist sie nicht ganz Wasserdicht, aber ich bin offen für Verbesserungen (und bitte gebt mir keine unbegründeten nicht-hilfreich-Punkte, sonst weiß ich nicht, was falsch war an meiner Vorgehensweise).
Mulder