2010-12-29 4 views
1

Ich möchte ein XML-Dokument aus einem HTML-Dokument erstellen, damit ich die XML-Analysetools verwenden kann. Mein Problem ist, dass mein HTML weder XHTML noch gültig ist. Wie kann ich die Ausnahmen umgehen? In diesem String <p> ist nicht abgeschlossen, noch ist <br> noch <meta>.Erstellen eines XML-Objekts aus schlecht formatiertem HTML

var poorHtml:String = "<html><meta content=\"stuff\" name=\"description\"><p>Hello<br></html>"; 
var html:XML = new XML(poorHtml); 

TypeError: Error #1085: The element type "meta" must be terminated by the matching end-tag "</meta>". 

Antwort

1

ich einige der Suche tat und kommen konnten mit nichts auf, außer dies wirklich scheint nicht möglich, ist die große Frage, wie sollte es korrigieren, wenn das Format nicht gültig ist.

Bei Browsern basiert jeder Browser auf seinen eigenen Regeln, was passieren sollte, wenn das schließende Tag nicht gefunden wird (fügen Sie es dort ein, wo der Code ein gültiges XML erzeugen würde) Anschließend DOM-Baum, oder selbst terminieren das Tag, oder entfernen Sie das Tag oder für den Fall, dass ein schließendes Tag ohne Öffnung gefunden wurde, wie dies behandelt werden soll, was ist mit nicht geschlossenen Attributen etc.).

Leider weiß ich nichts in der Spezifikation, die erklärt, was in diesem Fall getan werden soll, mit XHTML genauso wie flex es behandelt, sind diese fatalen Fehler und führen zu keiner Funktionalität, anstatt wie HTML4 es mit der behandelt skurrile und übergangssprachliche DTD-Optionen.

Um den Fehler zu vermeiden oder besser Fehler geben Messaging Sie diese verwenden können:

var poorHtml:String = "<html><meta content=\"stuff\" name=\"description\"><p>Hello<br></html>"; 

try 
{ 
    var html:XML = new XML(poorHtml); 
} 
catch(e:TypeError) 
{ 
    trace("error caught") 
} 

aber es ist wahrscheinlich, dass Sie am besten sein wird irgendeine Art von Server-Seite Skript aus mit dem XML oder korrigieren Sie die XML zu validieren, bevor Übergabe an den Kunden.

+0

Umgruppierung, kümmerte mich wirklich nur um die DOM-Parsing-Tools des XML-Formats in ActionScript. Z.B. Gibt eine Liste aller Elemente mit dem Attribut 'href' zurück. Gibt es einen HTML-Parser, der so suchen kann? – ojreadmore

+0

Wenn Sie nur alle Links auf einer Seite extrahieren möchten, tun Sie das besser manuell, ich persönlich bin kein großer Fan von regulären Ausdrücken, aber wenn Sie sich wohlfühlen, ist das der richtige Weg, sonst könnten Sie den ultra-manuellen Weg gehen Führen Sie eine Schleifensuche nach href = "var startPoint: Nummer = myString.indexOf ('href ="', lastEndpoint) dann var lastEndpoint = myString.indexOf ('' ', startPoint) dann myString.sub (startPoint, lastEndpoint)) oder else kann den Code hier durchsehen, mit regexp http://sourceforge.net/projects/as3htmlparser/develop – shaunhusain

0

Sie könnten versuchen, Ihren HTML-Code über HTML Tidy auf dem Server zu übergeben, bevor Sie ihn laden. Ich glaube, dass HTML Tidy einen guten Job beim Aufräumen von gebrochenem HTML leistet.

+0

Dies ist eine AIR-App, die den HTML-Code holt .. – ojreadmore

+0

Mit GETing meinen Sie mit einem HTTP GET von einem Server ? – Luke

1

Es gibt wahrscheinlich eine Implementierung von HTML Tidy in fast jeder Sprache, mit der Sie gerade arbeiten. Dies sieht vielversprechend für Ihre Wahl aus: http://code.google.com/p/as3htmltidylib/

Wenn Sie nicht in eine ganze Bibliothek ziehen möchten (würde ich nicht), könnten Sie einfach Ihren eigenen XML-Parser schreiben, der Fehler in jeder Art und Weise behandelt d schlagen automatisch schließende Tags vor, bis das Dokument wieder Sinn macht, wobei End-Tags ohne Start-Tags ignoriert werden und bestimmte spezielle Tags wie "body" und "html" möglicherweise geschlossen werden. Dies hat den zusätzlichen Vorteil, dass Sie es für alle Jobs optimieren können, für die Sie es benötigen, d. H. Indem Sie eine Liste aller Elemente mit dem Attribut "href" speichern, wenn Sie zu ihnen kommen.