Java Object das eine HTML Datei repräsentiert

PrincE

Aktives Mitglied
Hallo Java-Community,

suchfunktion und google hat mir nicht wirklich weiter geholfen.
Wie der Titel schon sagt ich suche ein Java Object das eine HTML Datei repräsentiert.

Beispiel:

Code:
<html>
<head>
<meta name="description" content="News, Test &amp; Kaufberatung zu PC, Computer, Handy und Home Entertainment." />
<meta name="keywords" content="Download, Forum, Test, News, Preisvergleich" />
<meta name="revisit-after" content="1 day" />
<meta http-equiv="content-language" content="de" />
<meta name="robots" content="noodp" />
<meta http-equiv="expires" content="900" />
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<meta property="fb:page_id" content="179800383306" />
<meta property="fb:admins" content="100001480969863"/>
</head>
<body>
qwe
</body>
</html>

Damit ich sagen kann .getHead().getElement("meta").getAttributes -> dann bekomm ich 'name','content',... ausgeben

und auch

.getHead().getElement("meta").getAttribute("name").getValue() -> dann bekomm ich 'description'.

javax.swing.text.Document hat zwar den Ansatz aber damit kommt man spätestens mit Value nicht weiter. Und auch so gibt es da Unstimmigkeiten wenn ich mehrere Beispiele nehme.

Hoffe jemand kann mir weiterhelfen
 
das funktioniert nicht weil z.B. wie im Beispiel angegeben Metatags geöffnet aber für "xml" nicht geschlossen werden.
Eine Html Datei ist keine wohl geformte XML Datei
 
Hö?
In deinem Beispiel sind die Meta-Tags ganz normale Elemente, die sich ohne weiteres als XML-Element auslesen lassen.
Wo ist das Problem?
 
das funktioniert nicht weil z.B. wie im Beispiel angegeben Metatags geöffnet aber für "xml" nicht geschlossen werden.

Doch werden sie:

[c]<meta property="fb:admins" content="100001480969863"/>[/c]

Das Element meta wird ja mit /> beendet. Es hat also keine Childknoten/Content sondern nur Attribute.
 
es ist ja nicht so das ich es nicht ausprobiert habe:

Datei:

HTML:
<html>
	<head>
		<meta name="keywords" content="Test, Seite">
	</head>
</html>

Code:

Java:
SAXBuilder builder = new SAXBuilder();
Document doc;
doc = builder.build("D:\\Beispiel.htm");
Element e = doc.getRootElement();
System.out.println(e.getName());

Fehler:

Code:
org.jdom.input.JDOMParseException: Error on line 5 of document file:///D:/Beispiel.htm: The element type "meta" must be terminated by the matching end-tag "</meta>".
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:530)
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:986)
	at Test.main(Test.java:48)
Caused by: org.xml.sax.SAXParseException: The element type "meta" must be terminated by the matching end-tag "</meta>".
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:518)
	... 2 more
Caused by: org.xml.sax.SAXParseException: The element type "meta" must be terminated by the matching end-tag "</meta>".
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:518)
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:986)
	at Test.main(Test.java:48)
Caused by: org.xml.sax.SAXParseException: The element type "meta" must be terminated by the matching end-tag "</meta>".
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:518)
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:986)
	at Test.main(Test.java:48)
 
Zuletzt bearbeitet:
Du hast da ja auch einen Fehler drin:

HTML:
<meta id = 't' name='keywords' content='Webspell-Templates, [...], Spraylogos'>

sollte:

HTML:
<meta id = 't' name='keywords' content='Webspell-Templates, [...], Spraylogos'/>

sein.

Und die table und body schließenden Tags sind auch fehlerhaft. Da fehlt das >
 
Du hast da ja auch einen Fehler drin:

HTML:
<meta id = 't' name='keywords' content='Webspell-Templates, [...], Spraylogos'>

sollte:

HTML:
<meta id = 't' name='keywords' content='Webspell-Templates, [...], Spraylogos'/>

sein.

Und die table und body schließenden Tags sind auch fehlerhaft. Da fehlt das >



ja ich hab jetzt mal ein einfacheres Beispiel genommen^^ die '>' sind irgendwie anders weggekommen.
Mit dem neuem Beispiel welches ich oben im comment editiert habe, bleibt die Fehlermeldung gleich.

Das Problem ist <meta /> ist XHtml.
Zum Beispiel wenn ich SELFHTML 8.1.2 (HTML-Dateien selbst erstellen) benutzen würde
die nur HTML benutzen da ist <meta > angesagt was bedeutet das diese mit Sax ein Fehler erzeugen würden.
 
Das Problem ist <meta /> ist XHtml.

Warum soll es ein Problem sein? Du verlinkst doch selber auf selfhtml:
Wenn Sie XHTML-Standard-konform arbeiten, müssen Sie das meta-Element als inhaltsleer kennzeichnen. Dazu notieren Sie das alleinstehende Tag in der Form <meta name="Eigenschaft" content="Wert" />.

Nachtrag: ah... hab das 2. "ist" überlesen
 
Zuletzt bearbeitet:
Also sind die Seiten mit denen du arbeitest nicht XHTML-konform?
Oder möchtest du keine Konformität erreichen müssen (auf den Grund bin ich gespannt).

Hä? Darum geht es doch garnicht. Ich möchte gerne alle Formen und Arten erreichen können und da diese Art und Weise mit SAX nur mit XHtml funktioniert reicht diese nicht?!
 
Siehe mein Nachtrag.

Geht es dir nur darum die Meta-Daten auszulesen? Da könnte auch RegEx helfen

ja darüber habe ich auch schon nachgedacht. Ich dachte aber es gibt die Möglichkeit die ganze Page in ein Java Object zu konvertieren um damit mehr Möglichkeiten zu haben.
Theoretisch möchte ich weit aus mehr als Metatags..
 
Ja, leider sind viele Browser viel zu gnädig und kaum einer bemüht sich seine Seiten mal zu validieren.
 
Jsoup schafft es beide schreibweisen zu verstehen und normiert diese sogar!
jsoup Library ist genau das was ich wollte. Danke euch.
 

Zurück
Oben