2009-05-18 3 views
0

Ich verwende Saxon 9, um ungültige HTML-Quellen zu analysieren. Insbesondere hat die html href Werte wie folgt aus:XSLT und XQuery bei ungültiger HTML-Eingabe, Teile von URI sehen wie Entitäten aus

< a href = "blah.asp fn = view & g_varID = 1234" > some text </a >

Ich erhalte Fehler:

"Fehler vom XML-Parser gemeldet: Der Verweis auf die Entität" g_varID "muss mit die ';' Trennzeichen. "

Der XML-Parser liest die Zeichenfolge "& g_varID" und beschwert sich, dass ein ";" um die Entität zu begrenzen. Aber das ist natürlich nicht als HTML-Entity gedacht - es ist nur ein Stück von einem URI.

Wie kann ich dem Parser mitteilen, ihn zu ignorieren? Hinweis: Ich verwende nicht-Schema-bewusste Saxon, nicht Saxon-SA.

Antwort

1

Stellen Sie sicher, dass Sie einen korrekten xhtml DOCTYPE haben. Entsprechend der xhtml1-strict.dtd, die ich betrachte, wird das href-Attribut CDATA deklariert, nicht PCDATA, was bedeutet, dass das Literal & vollkommen in Ordnung ist und nicht als eine Entität geparst werden sollte.

+0

In XML können string-typed Attribute ("CDATA-Attribute") Entity-Referenzen enthalten. (CDATA-Abschnitte können nicht, aber sie sind eine andere Sache). Es gibt sogar eine spezielle Warnung über Ampersands in Attributwerten in einem Anhang zur XHTML-Spezifikation: http://www.w3.org/TR/xhtml1/#C_12 –

+0

Diese Verwirrung über "CDATA" stammt aus der SGML-Ära. Es scheint hier eine gute Zusammenfassung zu geben: http://www.flightlab.com/~joe/sgml/cdata.html –

3

Wenn Ihr HTML nicht XML ist, wie erwarten Sie dann, dass ein XML-Prozessor es verarbeitet?

+0

Richtig, natürlich. Es ist ungültig und nicht xml. Aber es ist gut geformt. Ich denke, meine allgemeinere Frage lautet: "Kann ich dem Prozessor sagen, er solle die Validierung so weit entspannen, dass er an dieser Saite vorbeikommt?" –

+0

Der Prozessor verarbeitet XML. Was meinst du, es ist gut geformt, aber nicht XML? Wenn Sie HTML verarbeiten möchten, das kein XML ist, verwenden Sie einen HTML-Prozessor und keinen XML-Prozessor. –

+0

Es gibt eine nützliche Unterscheidung zwischen XML, das gültig ist, und XML, das nur wohlgeformt ist. Ich war ungeschickt. Wie Jeff Mc vorgeschlagen hat, war die Lösung in der Verwendung eines Doctype. Aber wie so oft ist das "html" so weit davon entfernt, dass die Verarbeitung Zeitverschwendung ist. Vielen Dank. –

0

Wie oben erwähnt, ist dies keine gültige XML, es ist HTML. Dieses spezielle Problem ist jedoch eines, das HTML-Tidy standardmäßig bereinigt: http://www.w3.org/People/Raggett/tidy/. Verwenden Sie es mit den folgenden Befehlszeilenargumente HTML in XHTML zu konvertieren:

tidy -asxhtml foo.html > foo.xhtml 

Und dann sollten Sie in der Lage sein, es durch Ihre XSLT zu laufen.

Verwandte Themen