ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
574
574
EMPFEHLEN
-
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 */
-
Das Problem muss doch mal jemand gehabt und gelößt haben.
Wirklich keiner?/* no comment */
-
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
-
Kopieren von Knoten mit dom4j
Von Sytlestar im Forum JavaAntworten: 3Letzter Beitrag: 09.06.09, 09:15 -
Problem mit XPath und DOM4J
Von Masipulami im Forum JavaAntworten: 0Letzter Beitrag: 29.10.07, 09:46 -
Bräuchte Hilfe bei DOM4J
Von NepHthYS23 im Forum JavaAntworten: 0Letzter Beitrag: 08.02.07, 21:21 -
java+xml mit dom4j
Von gwaan im Forum JavaAntworten: 4Letzter Beitrag: 18.10.05, 16:58 -
XML mit dom4j
Von günterk im Forum JavaAntworten: 7Letzter Beitrag: 10.09.04, 11:46





Zitieren
Login





