NSXMLParser подавляет амперсанд и - PullRequest
3 голосов
/ 12 ноября 2009

Я анализирую некоторый HTML-код с помощью NSXMLParser, и он сталкивается с ошибкой синтаксического анализатора каждый раз, когда встречает амперсанд. Я мог бы отфильтровать амперсанды, прежде чем разобрать его, но я бы предпочел разобрать все, что там есть.

Это дает мне ошибку 68, NSXMLParserNAMERequiredError: Имя обязательно.

Мое лучшее предположение, что это проблема набора символов. Я немного размыт в мире наборов символов, поэтому я думаю, что мое невежество кусает меня в задницу. Исходный HTML использует кодировку iso-8859-1, поэтому я использую этот код для инициализации анализатора:

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

Есть идеи?

Ответы [ 3 ]

7 голосов
/ 12 ноября 2009

К другим авторам: конечно, XML недействителен ... это HTML!

Вы, вероятно, не должны пытаться использовать NSXMLParser для HTML, а скорее libxml2

Для более подробного ознакомления с этой статьей, ознакомьтесь с этой статьей .

2 голосов
/ 12 ноября 2009

Вы уверены, что у вас есть действительный XML? Вы должны иметь специальные символы, такие как & escaped, в необработанном XML-файле вы должны увидеть &

0 голосов
/ 02 ноября 2012

Кодирование данных через NSString сработало для меня, в любом случае, вы автоматически высвобождаете объект, который не был выделен вами (dataUsingEncoding), поэтому происходит сбой, решение:

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

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

[dataString release];

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