Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

 << zurück
Java ist auch eine Insel von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 5
Java ist auch eine Insel

Java ist auch eine Insel
5., akt. und erw. Auflage
1454 S., mit CD, 49,90 Euro
Galileo Computing
ISBN 3-89842-747-1
gp Kapitel 13 Die eXtensible Markup Language (XML)
  gp 13.1 Auszeichnungssprachen
    gp 13.1.1 Die Standard Generalized Markup Language (SGML)
    gp 13.1.2 Extensible Markup Language (XML)
  gp 13.2 Eigenschaften von XML-Dokumenten
    gp 13.2.1 Elemente und Attribute
    gp 13.2.2 Beschreibungssprache für den Aufbau von XML-Dokumenten
    gp 13.2.3 Schema – eine Alternative zu DTD
    gp 13.2.4 Namensraum (Namespace)
    gp 13.2.5 XML-Applikationen
  gp 13.3 Die Java-APIs für XML
    gp 13.3.1 Das Document Object Model (DOM)
    gp 13.3.2 Simple API for XML Parsing (SAX)
    gp 13.3.3 Java Document Object Model (JDOM)
    gp 13.3.4 Pull-API StAX
  gp 13.4 Serielle Verarbeitung mit StAX
    gp 13.4.1 Unterschiede der Verarbeitungsmodelle
    gp 13.4.2 XML-Dateien mit dem Cursor-Verfahren lesen
    gp 13.4.3 XML-Dateien mit dem Iterator-Verfahren verarbeiten
    gp 13.4.4 Mit Filtern arbeiten
    gp 13.4.5 XML-Dokumente schreiben
  gp 13.5 Serielle Verarbeitung von XML mit SAX
    gp 13.5.1 Schnittstellen von SAX
    gp 13.5.2 SAX-Parser erzeugen
    gp 13.5.3 Die wichtigsten Methoden der Schnittstelle ContentHandler
  gp 13.6 XML-Dateien mit JDOM verarbeiten
    gp 13.6.1 JDOM beziehen
    gp 13.6.2 Paketübersicht
    gp 13.6.3 Die Document-Klasse
    gp 13.6.4 Eingaben aus der Datei lesen
    gp 13.6.5 Das Dokument im XML-Format ausgeben
    gp 13.6.6 Der Dokumenttyp
    gp 13.6.7 Elemente
    gp 13.6.8 Zugriff auf Elementinhalte
    gp 13.6.9 Liste mit Unterelementen erzeugen
    gp 13.6.10 Neue Elemente einfügen und ändern
    gp 13.6.11 Attributinhalte lesen und ändern
    gp 13.6.12 XPath
  gp 13.7 JAXP als Java-Schnittstelle zu XML
    gp 13.7.1 Einführung in XSLT
    gp 13.7.2 Umwandlung von XML-Dateien mit JDOM und JAXP
  gp 13.8 HTML-Dokumente einlesen


Galileo Computing

13.8 HTML-Dokumente einlesetoptop

Liegt ein HTML-Dokument als DOM-Baum vor, hätte das den Vorteil, dass sich das HTML-Dokument einfach untersuchen – etwa mit XPath – oder leicht konvertieren ließe. Das Problem dabei ist nur, dass HTML-Dokumente oft nicht XML-konform sind, also Fehler enthalten. Beim Einlesen würde der strenge XML-Parser Fehler melden und abbrechen.

JTidy

Für HTML-Dokumente, die nicht ganz XML-rein sind, gibt es mit JTidy (http://jtidy.sourceforge.net/), eine freie Bibliothek, die HTML-Dokumente einliest, Fehler intern (soweit möglich) korrigiert und als ordentlichen DOM-Baum repräsentiert. Die Benutzung ist einfach:

Tidy tidy = new Tidy();
// tidy.setMakeClean( true );   // Ohne Störungen
// tidy.setXmlTags( true );     // Eingabe als XML behandeln
org.w3c.dom.Document node = tidy.parseDOM( innull );

in steht für einen InputStream, der die Daten bereitstellt. Neben parseDOM(), das ein org.w3c.dom.Document liefert, gibt es auch parse(), was das Wurzelelement als org.w3c.tidy.Node liefert. Der zweite Parameter von parseDOM() – in unserem Beispiel mit null belegt – steht für ein Ausgabe-Objekt. Wird auf dem Tidy-Objekt die Methode parseXXX(in, out) aufgerufen, so schreibt JTidy einen korrekten XML-Strom in das gegebene OutputStream-Objekt. Online ist die API-Dokumentation unter http://jtidy.sourceforge.net/apidocs/index.html verfügbar.

Die Lizenz von JTidy ist zwar keine übliche, wie GPL oder Apache, aber trotzdem lässt sich die Bibliothek frei verwenden. Die Seite http://jtidy.sourceforge.net/license.html erklärt das genauer.

cyberneko

In einigen Fällen zickt auch JTidy und bricht mit vielen Meldungen ab. Für diesen Fall bietet sich eine Alternative an: Der HTML-Parser von cyberneko (http://www.apache.org/~andyc/neko/doc/html/index.html).

InputStream in = new FileInputStream( path );
org.cyberneko.html.parsers.DOMParser parser =
                                 new org.cyberneko.html.parsers.DOMParser();
parser.parse( new InputSource(in) );

Um das XML-Dokument als JDOM-Document weiterzuverarbeiten, nutzen wir einen DOMBuilder:

DOMBuilder builder = new DOMBuilder();
org.jdom.Document document = builder.build( parser.getDocument() );
 << zurück




Copyright © Galileo Press GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de