3 Stimmen

NSXMLParser verschluckt sich bei Ampersand &

Ich bin Parsen einige HTML mit NSXMLParser und es trifft einen Parser-Fehler jedes Mal, wenn es ein kaufmännisches Anführungszeichen begegnet. Ich könnte Ampersands herausfiltern, bevor ich es parsen, aber ich würde lieber alles parsen, was da ist.

Es gibt mir Fehler 68, NSXMLParserNAMERequiredError: Name ist erforderlich.

Meine Vermutung ist, dass es sich um ein Problem mit dem Zeichensatz handelt. Ich bin ein wenig verschwommen auf der Welt der Zeichensätze, so dass ich denke, meine Unwissenheit ist mir in den Hintern beißen. Die Quelle HTML verwendet Zeichensatz iso-8859-1, so dass ich diesen Code verwenden, um den Parser zu initialisieren:

NSString *dataString = [[[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding] autorelease];
NSData *dataEncoded = [[dataString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES] autorelease];
NSXMLParser *theParser = [[NSXMLParser alloc] initWithData:dataEncoded];

Irgendwelche Ideen?

2 Stimmen

Sie parsen HTML mit einem XML-Parser? Wie soll das jemals funktionieren? (Es sei denn, es handelt sich um wohlgeformtes XHTML, das nicht den HTML-Entity-Satz verwendet.) So oder so ist ein einfaches kaufmännisches Und sowohl in HTML als auch in XML ungültig, so dass Sie einen Parser für echtes gebrochenes HTML suchen müssten, was eine viel, viel schwierigere Aufgabe ist als das Parsen von XML.

7voto

Benjamin Cox Punkte 5990

An die anderen Poster: Natürlich ist das XML ungültig... es ist HTML!

Sie sollten wahrscheinlich nicht versuchen, NSXMLParser für HTML zu verwenden, sondern eher libxml2

Einen genaueren Blick auf die Gründe dafür finden Sie unter dieser Artikel .

3voto

Sind Sie sicher, dass Sie gültiges XML haben? Sie müssen Sonderzeichen wie & escaped haben, in der rohen XML-Datei sollten Sie sehen &

0voto

Jerome Punkte 601

Kodierung der Daten durch eine NSString funktionierte bei mir, trotzdem wird ein Objekt, das nicht von Ihnen selbst zugewiesen wurde, automatisch freigegeben (dataUsingEncoding), daher stürzt es ab, die Lösung ist :

NSString *dataString = [[NSString alloc] initWithData:data
                             encoding:NSISOLatin1StringEncoding];

NSData *dataEncoded = [dataString dataUsingEncoding:NSUTF8StringEncoding 
                                     allowLossyConversion:YES];

[dataString release];

NSXMLParser *theParser = [[NSXMLParser alloc] initWithData:dataEncoded];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X