tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
574
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Unicate Unicate ist offline Mitglied Brokat
    Registriert seit
    Apr 2005
    Beiträge
    358
    Hallo alle zusammen!

    Ich möchte mit dom4j und jaxen eine html parsen.
    hier meine html:
    Code xml:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
        <head>
            <meta content="test" />
        </head>
     
        <body>
            <div>So ne ********</div>
        </body>
    </html>

    und von dieser möchte ich gern den inhalt des div-tags haben, also dacht ich so:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    SAXReader reader = new SAXReader();
            // weil der parser sonst exceptions wirft
            reader.setValidation(false);
            reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
            // xml laden
            Document doc = reader.read(new File("test.html"));
            
            @SuppressWarnings("unchecked")
            // das hier geht nicht
            List<Element> list = doc.selectNodes("//div");
            // das einzige was geht ist "//html"
            // im debugger ist die liste an dieser stelle leer
            for(Element e : list) {
                System.out.println(e.toString());
            }

    Wenn ich das selbe versuche mit XPather zu machen geht das sehr gut.

    Wo ist das Problem?
     
    /* no comment */

  2. #2
    Unicate Unicate ist offline Mitglied Brokat
    Registriert seit
    Apr 2005
    Beiträge
    358
    Das Problem muss doch mal jemand gehabt und gelößt haben.

    Wirklich keiner?
     
    /* no comment */

  3. #3
    Unicate Unicate ist offline Mitglied Brokat
    Registriert seit
    Apr 2005
    Beiträge
    358
    Nach nun mehreren Stunden suchen habe ich den "Fehler" gefunden.
    Problem hier war, das der xml namespace für das Dokument gesetzt wurde.

    Hier die Lösung:
    Nach dem Element mit angehangenem Namespace fragen.
    Im obigen Beispiel wäre das "//xhtml:div". Nun wird der Parser sagen, das dieses Element keinen gebundenen Namespace hat. (XPath expression uses unbound namespace prefix xhtml)
    Deswegen geben wir ihm diesen.
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    SAXReader reader = new SAXReader();
    reader.setValidation(false);
    reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
    Document doc = reader.read(new File("test.xml"));       
    Dom4jXPath p = new Dom4jXPath("//xhtml:div");
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("xhtml", "http://www.w3.org/1999/xhtml");
    p.setNamespaceContext(new SimpleNamespaceContext(map));
    List<Element> list = p.selectNodes(doc);
    for(Element e : list) {
        System.out.println(e.asXML());
    }
     
    /* no comment */

Ähnliche Themen

  1. Kopieren von Knoten mit dom4j
    Von Sytlestar im Forum Java
    Antworten: 3
    Letzter Beitrag: 09.06.09, 09:15
  2. Problem mit XPath und DOM4J
    Von Masipulami im Forum Java
    Antworten: 0
    Letzter Beitrag: 29.10.07, 09:46
  3. Bräuchte Hilfe bei DOM4J
    Von NepHthYS23 im Forum Java
    Antworten: 0
    Letzter Beitrag: 08.02.07, 21:21
  4. java+xml mit dom4j
    Von gwaan im Forum Java
    Antworten: 4
    Letzter Beitrag: 18.10.05, 16:58
  5. XML mit dom4j
    Von günterk im Forum Java
    Antworten: 7
    Letzter Beitrag: 10.09.04, 11:46

Stichworte