Как получить публичные и системные идентификаторы DTD с NSXMLParser - PullRequest
0 голосов
/ 09 августа 2010

Я пытаюсь получить общедоступные и системные идентификаторы для DTD в документе XML через NSXMLParser.Хотя NSXMLParser в принципе предлагает publicID и systemID селекторы, они, похоже, не работают для меня.Тег doctype выглядит следующим образом:

<!DOCTYPE Article PUBLIC "-//SoftQuad Software//DTD Journalist v2.0 20000501//EN" "file:///C:/Program%20Files/Corel/XMetaL%204/Author/Rules/journalist.dtd">

Вот мой код (файл был открыт с помощью NSFileHandle 'readDataToEndOfFile:

NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
[parser setDelegate:self];
BOOL parseSuccessful = [parser parse];

В делегате parserDidStartDocument: Iпопробуйте получить доступ к идентификаторам:

NSLog(@"%@ : %@", [parser publicID], [parser systemID]);

Но я вижу только

(null) : (null)

Из документации:

Вы можете вызвать этот метод после операции разбораначался или после возникновения ошибки.

Так что я думаю, что это должно работать уже в parserDidStartDocument:, но я пытался вызывать эти селекторы в различных методах делегата (например, parser:didStartElement:namespaceURI:qualifiedName:attributes:, но безуспешно.

Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 26 августа 2010

Вы можете попробовать другой синтаксический анализатор.

http://www.robbiehanson.com/expat.html предоставляет замену NSXMLParser на основе экспата.

Вы также можете найти эту статью интересной, сравниваяпроизводительность различных парсеров XML на iPhone.

http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project

...