Probleme beim Parsen von XHTML-Datei

Status
Nicht offen für weitere Antworten.

byte

Top Contributor
Hallo,

ich möchte eine (etwas eigenwillige) XHTML Datei parsen, um Informationen bestimmter Tags auszulesen. Das Problem ist, dass offenbar irgendwo in Datei ein fehlerhaftes Zeichen zu sein scheint, so dass ich immer eine Exception bekomme, während der Parser die Wohlgeformtheit prüft:

Code:
org.xml.sax.SAXParseException: Der Inhalt ab "<
" ist unzulässiges Markup. Möglicherweise muss das Zeichen "
" () ein Buchstabe sein.
	at org.apache.crimson.parser.Parser2.fatal(Unknown Source)
	at org.apache.crimson.parser.Parser2.fatal(Unknown Source)
	at org.apache.crimson.parser.Parser2.content(Unknown Source)
	at org.apache.crimson.parser.Parser2.maybeElement(Unknown Source)
	at org.apache.crimson.parser.Parser2.content(Unknown Source)
	at org.apache.crimson.parser.Parser2.maybeElement(Unknown Source)
	at org.apache.crimson.parser.Parser2.content(Unknown Source)
	at org.apache.crimson.parser.Parser2.maybeElement(Unknown Source)
	at org.apache.crimson.parser.Parser2.content(Unknown Source)
	at org.apache.crimson.parser.Parser2.maybeElement(Unknown Source)
	at org.apache.crimson.parser.Parser2.content(Unknown Source)
	at org.apache.crimson.parser.Parser2.maybeElement(Unknown Source)
	at org.apache.crimson.parser.Parser2.parseInternal(Unknown Source)
	at org.apache.crimson.parser.Parser2.parse(Unknown Source)
	at org.apache.crimson.parser.XMLReaderImpl.parse(Unknown Source)
	at javax.xml.parsers.SAXParser.parse(Unknown Source)
	at javax.xml.parsers.SAXParser.parse(Unknown Source)
	at de.tubs.xhtml.SpanParser.parse(SpanParser.java:34)
	at de.tubs.xhtml.SpanParser.main(SpanParser.java:51)


Die XHTML Datei ist sehr dämlich aufgebaut (700kb groß, keine Formatierung, ewig lange Zeilen), so dass es mir unmöglich erscheint, die Fehlerquelle zu Fuß zu finden. Ich bin mir auch nicht sicher, ob es vielleicht nicht einfach nur ein Kodierungsproblem ist, also Java die korrekte Kodierung der Datei nicht feststellen kann.

Gibt es eine Möglichkeit, mit SAX zu parsen und solche Fehler einfach zu ignorieren? Denn mir ist das Format ansich ziemlich wurscht, ich möchte einfach nur alle <span> Elemente auslesen. Dazu hab ich mir einen DefaultHandler geschrieben, um genau diese Elemente zu behandeln. Nur soweit komme ich halt gar nicht, weil vorher schon die Exception kommt.

Gibt es eine Möglichkeit, die Prüfung auf wohlgeformtheit zu deaktivieren und trotzdem ein Dokument mit SAX zu parsen? Oder kennt jemand eine andere Möglichkeit, um Elemente aufzulesen? Ich habe auch schon versucht, einen eigenen Parser zu schreiben. Das Problem dabei ist jedoch, dass man die Datei nicht mal zeilenweise mit nem Reader einlesen kann, weil die Zeilen so lang sind, dass die Performance dabei in die Knie geht.

Der Code sieht im Moment wie folgt aus:

Code:
SaxParser parser = SAXParserFactory.newInstance().newSAXParser();
DefaultHandler handler = new SpanHandlerImpl();

parser.parse(new FileInputStream(file), handler);

...

public class SpanHandlerImpl extends DefaultHandler {

	private List spans;
	
	public SpanHandlerImpl() {
		spans = new ArrayList();
	}

	public List getSpans() {
		return spans;
	}

	public void startElement(String namespaceURI, String localName, String qName, Attributes attributes) throws SAXException {
		if(localName.equals("span")) {
			System.out.println("Span gefunden!");
		}
	}

	public void fatalError(SAXParseException e) throws SAXException {
		// nix
	}

	public void error(SAXParseException e) throws SAXException {
		// nix
	}

	public void warning(SAXParseException e) throws SAXException {
		// nix
	}
}
 

foobar

Top Contributor
Gibt es eine Möglichkeit, mit SAX zu parsen und solche Fehler einfach zu ignorieren? Denn mir ist das Format ansich ziemlich wurscht,
Nein, denn wenn es nicht wohlgeformt ist, kann man es auch nicht parsen. Wenn du nur ein paar Elemente extrahiern willst, bist du mit einem Regex bestimmt besser dran.
 

Campino

Top Contributor
Ich meine die Parser aus dem JDOM-Package würden wenn sie fehler finden die Zeile oder die Zeichenzahl angeben, dass könnte dir beim suchen nach der Fehlerquelle helfen...ansonsten gibt es bestimmt Programme, die das können...
 

byte

Top Contributor
Mit Regex wird das nicht ohne weiteres gehen, weil die Datei wie gesagt extrem groß ist. Und die Zeilen sind so lang, dass man sie nicht mal eben in einen String lesen kann. Ich müsste wohl erstmal einen Pretty Printer über die Datei laufen lassen, um sie vernünftig auslesen zu können. Oder ich müsste die Datei nicht zeilenweise einlesen sondern als bytes, aber dieses Ansatz ist mir irgendwie zu low level bzw. anstrengend. :roll:

Hätte die Datei eine vernünftige Formatierung, dann würde ich mich nicht so schwer tun. :roll:


Edit:

Campino hat gesagt.:
Ich meine die Parser aus dem JDOM-Package würden wenn sie fehler finden die Zeile oder die Zeichenzahl angeben, dass könnte dir beim suchen nach der Fehlerquelle helfen...ansonsten gibt es bestimmt Programme, die das können...

Mit JDOM hab ichs auch schon probiert. Bei mir zeigt er bloß die Zeile an, doch das hilft mir noch nicht so viel, weil die Zeilen wie gesagt extrem lang sind.

Ich hab das Ding jetzt mal über den Validator bei W3C laufen lassen und offenbar gibt es wohl ein Haufen falscher Zeichen. Die Tags stimmen aber alle, das betrifft nur den Textinhalt der Tags. Also die Datei ist quasi schon wohlgeformt, jedoch meckert der Parser halt rum. Ich kann die Datei z.b. auch im Browser angucken. Also kann die Wohlgeformtheit ja nicht so falsch sein.

Man muss doch irgendwie dem Parser mitteilen können, dass er die Textinhalte der Tags ignorieren soll. Kann ihm doch wurscht sein, was da steht, solange die Tags alle stimmen. :roll: Und nur um die gehts mir ja auch.
 

byte

Top Contributor
Ich habe jetzt mal alle Linebreaks entfernt. Ich habe nämlich festgestellt, dass ein paar Tags durch Linebreaks getrennt wurden. Das war wohl auch ein Fehler. Aber jetzt kriege ich schon den nächsten Fehler:

Code:
org.xml.sax.SAXParseException: Abstandszeichen vor Attributen erforderlich

Offenbar waren die falschen Zeichen gar nicht das Problem, sondern es sind einfach doch einige Tags zerstört. Damit ist das Parsen mit DOM und SAX also endgültig zum Scheitern verurteilt, denn wenn die Tags nicht wohl geformt sind, kanns ja nicht funktionieren.

Ich werde mir was anderen überlegen. Trotzdem danke an alle!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Probleme beim html parsen mit tagsoup XML & JSON 4
M Probleme beim Parsen eines gefilterten XML-Dokuments XML & JSON 6
N Probleme bei der Formatierung beim Einfügen und löschen über DOM XML & JSON 7
L Jackson JSON: Probleme beim einlesen XML & JSON 1
hdi Probleme beim Erstellen einer XML XML & JSON 7
H JAXB Probleme beim Unmarshalling XML & JSON 3
S Probleme beim erstellen einer Jar XML & JSON 12
C SAX Probleme beim lesen XML & JSON 4
D Probleme beim SAX parsing XML & JSON 4
R JAVA und DOM, probleme beim einfügen von elementen ?????? XML & JSON 6
Kirby.exe Probleme mit XML XPATH Select XML & JSON 3
G Probleme mit Jsoup in .jar File XML & JSON 11
K JAX-WS Bindin-Probleme XML & JSON 1
B Probleme mit RelativeLayout XML & JSON 1
K XOM Builder Probleme XML & JSON 3
N Jsoup: PHP-Tags bereiten Probleme? XML & JSON 2
M SAX-Parsing Probleme XML & JSON 23
M Probleme mit XPath bei Java XML & JSON 5
G Probleme mit XML und JTree XML & JSON 9
klattiator Probleme mit Codierung XML & JSON 3
T XML und Sonderzeichen, Probleme mit ASP.NET Server XML & JSON 2
G Probleme mit Namespaces XML & JSON 5
D Probleme mit Eclipse Modeling Framework (EMF) XML & JSON 2
S PDF Erzeugung - Probleme mit der XML Datei bei Schema-Infos XML & JSON 2
F JAXB - Nachträglich hinzugefügter Code macht Probleme XML & JSON 2
P Probleme mit JDom . addContent(int index,Collection c) XML & JSON 2
F Unmarshall Probleme XML & JSON 5
R Probleme mit Transformer und StreamResult XML & JSON 4
C Probleme mit Include XML & JSON 10
C POI + jXLS Probleme XML & JSON 3
B DOM DTD laden abschalten, Probleme mit Doctypes und PIs XML & JSON 2
S Probleme mit Jdom XML & JSON 3
G probleme mit package XML & JSON 12
M Probleme mit String XML & JSON 3
H Probleme mit xmlrpc und php XML & JSON 13
B Probleme mit Zugriff auf eXist-Datenbank XML & JSON 9
H Neu bei JAVA- Probleme mit der Integration von Xerces XML & JSON 3
P Probleme mit jdom XML & JSON 5
W Ungleiches Escaping beim Marshalling XML & JSON 8
S Hilfe beim RDF-Graphen XML & JSON 0
R Beim Serialisieren fehlt die letzte Zeile XML & JSON 5
A Leeres Array beim Auslesen von XML-Datei XML & JSON 4
A XML-Fehler beim Prefix von xmlns XML & JSON 2
K Beim Parsen einer XML-Datei Connection timed out XML & JSON 4
G Langsam beim SAX-Parsen - woran liegts? XML & JSON 2
A Fehler beim Erzeugen eines XML-Schema XML & JSON 4
B Validierung nur beim einlesen oder auch beim schreiben? XML & JSON 4
D JAXBException beim Marshaller XML & JSON 4
M Read / write Problem beim ByteStrom XML & JSON 2
whitenexx Problem beim parsen von Facebook XML XML & JSON 3
J Dateinamen beim Start auslesen XML & JSON 8
F Hilfe beim bearbeiten von XML elemente XML & JSON 3
N XStream ConversionException beim Deserialisieren in (Hibernate)Objekt XML & JSON 6
G Problem beim schreiben von XML in eine File XML & JSON 2
L Reihenfolge beim xml Datei parsen einhalten? XML & JSON 8
sylo Beim Erzeugen einer XML Datei auch die XML Struktur erzeugen? XML & JSON 11
B Problem beim löschen von ChildNodes aus einem XML-DOM XML & JSON 3
E JDOM - Problem beim Zusammenfügen zweier Dateien XML & JSON 2
N Hilfe beim Einstieg in EMF XML & JSON 6
D Das Programm hängt etwa 5 Sekunden beim Aufruf der parse-Methode XML & JSON 6
D Tabs/Einrückungen der XML-Elemente gehen beim Schreiben verloren XML & JSON 5
T Problem beim Parsen von Attribut xmlns="urn:com:test&qu XML & JSON 6
G XML Tag beim Einlesen manipulieren XML & JSON 2
J Problem beim XML-Lesen XML & JSON 2
N jdom problem beim lesen von child elementen XML & JSON 5
P NullPointerException beim Auslesen XML & JSON 8
M Performance beim Binding XML & JSON 2
E XOM setzen von XML-Schema declaration beim erzeugen XML-File XML & JSON 2
J Fehler beim laden einer .xml XML & JSON 3
G DOCTYPE Problem beim Transformer/TransformerFactory etc. XML & JSON 13
P OutOfMemoryError beim Einlesen einer XML-Datei XML & JSON 7
P Problem beim erstellen eines neuen Elements (JDOM) XML & JSON 5
S JDOM-Kein indent beim XMLOutputter XML & JSON 4
C Zeile herausfinden in der ein Fehler beim Einlesen entsteht XML & JSON 3
V Datenverlust nach sortieren (nur beim serialisieren) XML & JSON 4
S Problem beim Erstellen eines pdfs XML & JSON 3
R Problem beim Auslesen von Attributen XML & JSON 4
MiMa Buch Metadaten aus XML Datei parsen XML & JSON 48
S XML Document Parsen und Ausgeben mit Suchfunktion XML & JSON 21
M parsen von realen HTML-WEB-Seiten XML & JSON 1
MiMa parsen mit regex -> ein schnelles Ende XML & JSON 10
F Parsen von Daten aus einer Homepage XML & JSON 6
C Parsen des XML-Streams mit SAX XML & JSON 3
M XML Datei Parsen XML & JSON 4
D SAX parsen - Wie? XML & JSON 11
S XML Parsen und Werte zwischenspeichern XML & JSON 2
K Kurze XML Datei Parsen XML & JSON 5
J Comments in XML parsen XML & JSON 3
H Nicht wohlgeformtes XML mit SAX parsen XML & JSON 2
M XML Parsen JDOM NullPointerEcxeption XML & JSON 7
Z XML parsen - Element mit Werten XML & JSON 2
ruutaiokwu xml nur bis auf eine bestimmte ebene parsen mit javax.xml... XML & JSON 5
L [SAX] Geschachtelte XML Datei parsen XML & JSON 3
R XML in UTF-8 mit SAX parsen XML & JSON 9
O Parsen einer XML mit JDOM ohne Doctype Declaration XML & JSON 2
Semox Kann JUnit XML Parsen? XML & JSON 2
L xml Datei parsen ohne End-Tag XML & JSON 6
T RSS-Feed parsen und in Datenbank speichern XML & JSON 6
B XML parsen XML & JSON 3
H XML parsen und unbekannten Namespace zurückgeben XML & JSON 5

Ähnliche Java Themen

Neue Themen


Oben