+ Antworten
Ergebnis 1 bis 7 von 7

Thema: Sax-like HTML5-Parser Lib in Java?

  1. #1
    Frequent User Halbes Megabyte Themenstarter

    Registriert seit
    31.07.2013
    Ort
    Hamburg
    Fachbeiträge
    557
    Genannt
    56 Post(s)
    Blog-Einträge
    2
    Hallo,

    ich möchte gerne eine Datei parsen, die html5 enthält. Bei der Internetsuche bin ich auf JSOUP gestoßen. Das parst nur DOM-like. Ich möchte aber mit einer Stream-API a la SAX (XMLEventReader) arbeiten. Der erste naive Versuch mit der SAX-API ist schon an dem <!DOCTYPE html> gescheitert, weil das keine valide XML-Präambel ist. Auf der Suche nach anderen Libs hab ich nicht wirklich was gefunden, was überzeugt. Kennt jemand da was?

    Danke und viele Grüße aus Tornadoland.
    Geändert von nillehammer (08.06.2016 um 22:01 Uhr)

  2. #2
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.965
    Genannt
    325 Post(s)
    Ob es in Anbetracht der speziellen Anforderung passend ist, weiß ich nicht - ich weiß nicht, ob er speziell HTML5 unterstützt (oder was einen solchen Parser ausmacht - es sind doch immer nur <vieleTags> oder nicht?). Aber wenn es weder DOM noch SAX sein soll: Ich habe (nicht für "professionelle" Anwendungen, sondern nur für private Experimente) mit Jericho HTML Parser ausgezeichnete Erfahrungen gemacht. Er schluckt so ziemlich alles, auch wenn's nicht wirklich valide ist, ist ausgezeichnet dokumentiert und sehr einfach zu verwenden. (Tatsächlich ist das das einzige Projekt, dem ich bisher xx $ gespendet habe).

    Aber selbst wenn er nicht passt: Unten auf der Seite sind noch Alternativen aufgelistet, die du durchprobieren kannst

  3. #3
    Frequent User Halbes Megabyte Themenstarter

    Registriert seit
    31.07.2013
    Ort
    Hamburg
    Fachbeiträge
    557
    Genannt
    56 Post(s)
    Blog-Einträge
    2
    Zitat Zitat von Marco13 Beitrag anzeigen
    weiß nicht, ob er speziell HTML5 unterstützt (oder was einen solchen Parser ausmacht - es sind doch immer nur <vieleTags> oder nicht?)
    Stimmt, es würde mir auch reichen, wenn die Doctype/Text/Tag/Attribut-Knoten rauskommen. Validierung brauche ich nicht.
    Zitat Zitat von Marco13 Beitrag anzeigen
    Aber wenn es weder DOM noch SAX sein soll
    Naja, SAX wäre schön gewesen, geht aber nicht. Oder doch?
    Zitat Zitat von Marco13 Beitrag anzeigen
    Jericho HTML Parser
    Danke für die Empfehlung, StreamedSource sieht recht vielversprechend aus. Mal sehen, wie Jericho mit dem doctype zurecht kommt...

  4. #4
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.965
    Genannt
    325 Post(s)
    Zitat Zitat von nillehammer Beitrag anzeigen
    Naja, SAX wäre schön gewesen, geht aber nicht. Oder doch?
    Nun, ich weiß nicht, nach welchen Kriterien man einen Parser "hart" als "SAX oder nicht" klassifizieren könnte. Er sagt in der Übersicht
    - Compared to a tree based parser such as DOM, the memory and resource requirements can be far better ...
    - Compared to an event based parser such as SAX, the interface is on a much higher level and more intuitive ...
    WAS genau er da intern macht, ist (mir) nicht ganz klar. Aber bisher konnte ich da so ziemlich jedes HTML reinwerfen, und er konnte damit umgehen. Genaue Performanceanalysen habe ich aber nicht gemacht, und was passiert, wenn man ihm eine 1000MB-HTML-Datei gibt, und man eigentlich nur wissen will, ob sie mit <html> anfängt und mit </html> aufhört, weiß ich auch nicht. Welchen konkreten Grund gibt es denn, speziell nach SAX zu fragen? Speicherbedarf, Performance, oder irgendein spezielles Anwendungsmuster?

  5. #5
    Frequent User Halbes Megabyte Themenstarter

    Registriert seit
    31.07.2013
    Ort
    Hamburg
    Fachbeiträge
    557
    Genannt
    56 Post(s)
    Blog-Einträge
    2
    Zitat Zitat von Marco13 Beitrag anzeigen
    Nun, ich weiß nicht, nach welchen Kriterien man einen Parser "hart" als "SAX oder nicht" klassifizieren könnte.
    Recht einfach, ein Parser, der eine Implementierung der SAX-API bereit stellt, konkret des Interfaces XMLEventReader. Die mit dem JDK mitgelieferte Defaultimplementierung com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl wirft mir wegen des doctypes am Anfang der html5-Datei einen Fehler. Wenn es andere SAX-Parser Impls gäbe, die das nicht machen, könnte man die austauschen. Das wäre für mich OK.
    Zitat Zitat von Marco13 Beitrag anzeigen
    Welchen konkreten Grund gibt es denn, speziell nach SAX zu fragen? Speicherbedarf, Performance, oder irgendein spezielles Anwendungsmuster?
    Ich benutze plain html5 Dateien als Templates. Die möchte ich z.B. für Lokalisierung filtern und manipulieren. Das geht mit einem Stream-basierten Ansatz. Dafür brauche ich kein DOM o.ä.

    Speicherbedarf ist ein Argument. Es ist aber entschärft, weil die Templates soo groß eigentlich auch nicht sind.

    Wichtiger ist mir das Programmiermodell Streaming mit mapping/filtering. Anstatt Programierung über Seiteneffekte (Manipulation des veränderlichen DOMs).
    Geändert von nillehammer (09.06.2016 um 15:17 Uhr)

  6. #6
    Frequent User Megabyte
    Registriert seit
    01.08.2013
    Fachbeiträge
    1.741
    Genannt
    114 Post(s)
    Ohne bisher damit gearbeitet zu haben, erinnerte ich mich noch daran, dass in thymeleaf 3 ein neuer Parser zum Einsatz kommt, der zwar explizit für thymeleaf entwickelt wurde, aber auch losgelöst verwendbar ist.
    Dieser Parser ist "sax-like" und kann mit html5 umgehen. Er wurde auf einen schmalen Memoryfootprint und hohe Performance optimiert.
    Siehe hier: attoparser

  7. #7
    Frequent User Halbes Megabyte Themenstarter

    Registriert seit
    31.07.2013
    Ort
    Hamburg
    Fachbeiträge
    557
    Genannt
    56 Post(s)
    Blog-Einträge
    2
    Vielen Dank für Eure beiden Hinweise. Die beiden Libs sind mir bei der Suche durch gerutscht. Beide sind auf einem einigermaßen aktuellen Stand und tatsächlich gut dokumentiert.

    Ich habe mich vornehmlich mit den API-Docs befasst:
    Jericho HTML Parser 3.4
    Mit net.htmlparser.jericho.StreamedSource lässt sich ähnlich arbeiten wie mit javax.xml.stream.XMLEventReader.

    attoparser 2.0.0.RELEASE API
    Die Verwendung von org.attoparser.simple.IMarkupHandler bzw. ISimpleMarkupHandler finde ich für meinen Zweck ungeeigneter.

    Das ist die Dokumentationslage. Zu praktischen Tests bin ich noch nicht gekommen...

+ Antworten Thema als "gelöst" markieren

Direkt antworten Direkt antworten

Nenne die Wurzel aus Einhundertvierundvierzig (Zahl eingeben) !

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. PostgreSQL-Parser in Java (Alternative für ANTLRv4 und GSP)
    Von Tornadotuan im Forum APIs & Frameworks
    Antworten: 8
    Letzter Beitrag: 19.05.2016, 14:31
  2. (JavaScript) Java Methode aufrufen aus einer HTML5/JavaScript Seite.
    Von ZickZack im Forum HTML / CSS / JavaScript / AJAX
    Antworten: 2
    Letzter Beitrag: 18.05.2016, 16:16
  3. Antworten: 0
    Letzter Beitrag: 04.09.2015, 16:27
  4. (XML-Schema) XSD Parser
    Von Ducksoul im Forum XML-Programmierung
    Antworten: 6
    Letzter Beitrag: 17.05.2014, 12:09
  5. .NET JSON Parser nach Java Import
    Von MannOhneNick im Forum Dotnet-Forum
    Antworten: 8
    Letzter Beitrag: 11.04.2014, 12:12

Stichworte

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •