# HTML Datei mit SAXBuilder laden hängt sich auf



## Airwolf89 (29. Okt 2011)

Hallo Leute,

habe da mal wieder ein kleines Problem:

Ich arbeite mit JDom (1.1.2) und versuche ein HTML File zu laden um es weiter zu bearbeiten.
Das HTML File ist ganz simpel:


```
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body></body>
</html>
```

Das versuche ich mit einem SAXBuilder zu laden, bei meinen normalen XML Files funktioniert das auch super. Nur beim HTML-File hängt sich das Teil auf. Kanns leider nicht genauer beschreiben, das Programm bricht nicht ab, aber es tut sich gar nichts mehr.

Mein Code sieht folgendermaßen aus:


```
public String loadFile(String xmlh_path) {
        String xmlh_id = "";
        Document xmlh_doc = null;

        System.out.println("checkpoint a");
        System.out.println("path: " + xmlh_path);

        try {

            File f = new File(xmlh_path);

            System.out.println("checkpoint b");
            xmlh_doc = new SAXBuilder(false).build(f);

            System.out.println("checkpoint c");

            if (xmlh_doc.getRootElement() == null) {
                System.out.println("error building file, " + xmlh_path);
            } else {
                System.out.println("checkpoint d");
                xmlh_id = String.valueOf(xmlh_doc.hashCode());
                this.docColl.put(xmlh_id, xmlh_doc);
            }
            return xmlh_id;
        } catch (JDOMException ex) {
            Logger.getLogger(XMLHandler.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(XMLHandler.class.getName()).log(Level.SEVERE, null, ex);
        }
        return xmlh_id;
    }
```

Beim HTML File bleibt er dann zwischen checkpoint b und c stehen, da rührt sich einfach nix.

Das File an sich wird korrekt geladen, habe ich schon überprüft.

Was könnte da die Ursache sein? Habe schon versucht mich mit dem Debugger durchzuwühlen, aber das hat mir nicht viel gebracht. Er bleibt genau in der Datei XMLDocumentFragmentScannerImpl in der do-while Schleife bei event.next() hängen, da sagt mir der Debugger dass event in dem Kontext ne unbekannte Variable ist. (Keine Ahnung wie viel ich darauf geben kann)

Reicht euch das soweit an Informationen? Oder isses gar nicht so kompliziert und der kann einfach keine HTML Dateien parsen? XHTML ist ja im Grunde auch nur XML (korrigiert mich bitte falls ich falsch liege)

Hoffe ihr habt einen Rat für mich.

Danke im voraus.


----------



## ...ButAlive (29. Okt 2011)

Deine Datei ist nicht wellformed, da das meta-Tag nicht geschlossen wird. Ob es daran liegt, dass sich der SaxParser aufhängt, kann ich dir leider nicht sagen, da ich es nicht ausprobiert habe.


----------



## Airwolf89 (29. Okt 2011)

Hmm, daran lags auch nicht. Weder mit geschlossenem Tag noch komplett ohne Meta-Tag. Gleiches Ergebnis. XHTML Header müsste doch auch richtig sein, oder?

Aber danke schonmal für den Hinweis.


----------



## Airwolf89 (29. Okt 2011)

Hmm, habe den "Fehler" gefunden. Er kommt einfach mit dem Header bzw. DocType nicht klar.

Wenn ich den rauslösche, dann gibts keine Probleme mehr. Konkret scheint das bei der URL im Doctype aufzutreten. Was kann denn da der Fehler sein?

ich verwende diesen Doctype hier:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Irgendwie kriegt er bei den Teilen in Anführungszeichen Probleme.
Habt ihr da ne Idee?

Danke im voraus.


----------



## mfernau (1. Nov 2011)

Hm - Soweit ich weiss ist HTML einfach kein XML. HTML ist abgeleitet von SGML. XML ist soetwas wie SGML aber um wesentliche Punkte vereinfacht. Aber ein XML-Parser parst nun mal XML und kein SGML/HTML.
Diese <DOCTYPE..> Geschichte kommt von SGML und ist daher kein XML. Ich denke Du musst diese DOCTYPE einfach vor dem parsen entfernen und natürlich analysieren ob es sich tatsächlich um XHTML handelt. Denn wenn nicht - wird Dein SAX Parser die Segel streichen


----------

