Tags "parsen"

XPrototypeX

Aktives Mitglied
Soo wollen wir mal anfange. Ich erstmal kein Quellcode posten, sondern das eher in der Theorie diskutieren.

Ich hab einen String. Dieser beinhaltet Schlüsselwörter zwischen Tags. (z-B <Text>Hallo Leute </Text>) Bei manchen Tags stehen jedoch auch die benötigten Informationen in den Tags.

Wie würdet ihr daran gehen?

Ich habe mir zwei verschiedene Optionen überlegt.

Eine Methode schreiben die per indexOf den Tag sucht, dann das ände sucht. Dann einen Substring aus den beiden Werten bildet (Den Tag an sich raus rechnen).
Das wäre denke ich etwas perfomanter als meine 2. variante.
Ausgabe: Hallo Leute

Die 2. Methoden arbeitet auch mit indexOf. Nun wird jedoch der komplette Tag in eine ArrayList geschrieben. Am ende stelle ich Methoden bereit, die nach Tags in der Liste suchen und diesen vollständig zurück liefert order nur den Text.
Also Ausgabe: <Text>Hallo Leute </Text> bzw. Hallo Leute

Die Frage die ich mir stelle, geht es noch anderes bzw. schneller als mit indexOf?
 
Ich empfehle eine HTML/XML Parser Bibliothek - JSoup finde ich bisher ab besten/einfachsten.
Könnte eventuell ein Overkill sein, wenn die Aufgabe so einfach bleibt, aber schaden kann es ja nicht .
 
Wenn du was lernen willst, würde ich eine Zustandsmaschine verwenden - ansonsten natürlich eine Bibliothek

du verwandelst einen String in ein char-Array

dann läufst du entlang

Wenn ein "<" kommt: push...Eine Etage höher

Wenn ein ">" kommt: pop...Eine Etage tiefer

Wenn ein = kommt, schauen was vorher war, und warten auf " ...

und so weiter. Gymnasik mit indexOf und ähnlichen Konstukten wird schnell ein undurchdringliches Gestrüpp, vor allem wenn die Tags ineinander geschachtelt sind
 
Naja, es gibt mir eigentlich nicht um den "sauberen" weg sondern eher um die Geschwindigkeit.
Klar könnte ich da jetzt irgendein HTML Parser nehmen. Aber der ist dann nicht so ausgelegt wie ich das gerne hätte.
Ich brauche wirklich nur das was zwischen den Tags steht und einmal eine Sache die in den Tags steht.
Die 2 oben beschriebenen Methoden habe ich auch schon. Nun wollte ich halt wissen, ob es noch anderes geht ohne indexOf und ob dies vielleicht sogar perfomanter ist.
 
Es geht wohl um www.java-forum.org/xml-co/145453-neuer-xml-parser.html .

"DIE BESTE" Lösung weiß ich nicht, vermutlich gibt es sie auch (mal wieder) nicht, aber es gibt viele freie XML-Parser, bei denen man sich ggf. Inspiration holen kann. Da sieht man dann auch, dass es sehr SEHR SEHR kompliziert sein kann, wenn man Escape- Sonder- und Anführungszeichen richtig Erkennen und im Rahmen der <>-Suppe behandeln will (und dass man das nicht mal eben in 2, 3 Stunden runterschreibt 😉 )
 
Hallo,

was spricht gegen reguläre Ausdrücke. Mit dem folgendem Programm (stand-alone oder als eclipse plugin) kann man die auch hervorragend testen: QuickREx

Grüße
 
Ne geht eigentlich mehr um HTML's und da auch nur wie gesagt um wenige Tags.
Ob wenig oder viel, spielt da eher eine untergeordnete Rolle. Viel wichtiger ist die Frage, ob dein Parser korrekt arbeitet. Ich habe es hier schon mal angedeutet:

Dein Programm sollte wie dein Körper sein. Wichtige Abwehr- bzw. Entgiftungsorgane u.Ä. sind dort redundant angelegt (z.B. Nieren), großflächig ausgebaut (Haut, Lymphsystem/-knoten) oder erholen sich auf schon fast magisch anmutende Weise (Leber). Praktisch alle Organe, die direkt mit der Umwelt in Kontakt kommen, haben erstaunliche Schutzmechanismen ausgebildet (z.B. die Augen mit Lidern, Brauen, Wimpern, Hornhaut etc.) oder sind quasi selbst Schutzorgane (z.B. die Haut mit Säureschutzmantel und einem gigantischen Netz an Sensoren). Das Ziel ist immer das gleiche: Alles, was von Außen kommt, ist potentiell gefährlich und sollte am besten gar nicht erst in den Körper gelangen, und wenn doch, möglichst schnell und unkompliziert ausgeschieden werden (notfalls z.B. durch Kotzen, es sei denn, man ist ein Pferd).

Und genauso sollte dein Programm misstrauisch gegenüber jeder Art von Eingaben sein und im Zweifelsfall lieber kontrolliert abstürzen als Mist bauen.

Was die Performance angeht, kannst du übrigens beruhigt sein: Die meisten Programmier- und Auszeichnungssprachen sind so konstruiert, dass mit etwas Glück (schnelles Nachschlagen bei kontextuellen Abhängigkeiten vorausgesetzt) die gesamte Eingabe praktisch in einem Rutsch erfasst werden kann. Das gilt auch für HTML (glaube ich).

was spricht gegen reguläre Ausdrücke.
HTML ist keine reguläre Sprache, folglich wäre ein HTML-Parser, der nur mit regulären Ausdrücken arbeitet, "widersprüchlich" (d.h., er akzeptiert Eingaben, die kein HTML sind) oder "unvollständig" (d.h., gültiges HTML wird von ihm nicht akzeptiert).

Ark
 
Abgesehen davon wäre auch gut zu wissen, um welches HTML es geht. Um gültiges? Oder auch um Ungültiges? Die Frage ist nicht so ironisch gemeint, wie sie klingt: Ich vermute, dass die ALLERmeisten Webseiten in irgendeiner Form ungültiges HTML enthalten. Ungültige Tags, Fehlende Schließende Tags, oder schlicht falsch gematchte Tags. Wenn es um's lesen geht, habe ich mit Jericho HTML Parser gute Erfahrungen gemacht.
 

Zurück
Oben