2009-12-03 2 views
9

Я просто столкнулся с этим и не мог получить четкого ответа из документации.NSXMLParser init с XML в формате NSString

Я извлекаю некоторый XML через соединение HTTPS. Я делаю все виды аутентификации и т. Д., Поэтому у меня есть набор классов, который имеет дело с этим в хорошем поточном режиме. Результатом является NSString, что идет что-то вроде:

<response> 
//some XML formatted test 
</response> 

Это означает, что не существует кодирования = «UTF-8» Отступ = «да» метод = «XML» или другие блоки заголовка, чтобы указать, что это фактический XML, а не только NSString.

Я предполагаю, что я буду использовать [NSXMLParser initWithData: NSData] для создания синтаксического анализатора, но как я буду форматировать или отбрасывать свой NSString из текста в формате XML в собственный объект NSData, который NSXMLParser будет понимать и анализировать?

Надеется, что это имеет смысл, спасибо за любую помощь, оказанной :)

ответ

29

Вы можете преобразовать строку в объект NSData с использованием метода dataUsingEncoding:

NSData *data = [myString dataUsingEncoding:NSUTF8StringEncoding]; 

Вы можете кормить это NSXMLParser.

+0

Благодаря Philippe, я попробовать это прямо сейчас. – RickiG

+0

Отлично! Только то, что я искал. Спасибо. –

1

К тому времени NSXMLParser имеет данные, что это в значительной степени собираются ожидать, что это будет XML ;-)

Я уверен, что заголовок инструкции обработки не является обязательным в этом контексте. То, как вы получаете NSString в NSData, будет диктовать кодировку (используя dataUsingEncoding:).

(редактирование: Я искал для кодирования перечислимого, но Philippe Leybaert опередил меня, но повторить его здесь все равно, что-то вроде: [nsString dataUsingEncoding:NSUTF8StringEncoding])

Я прошел NSString х XML таким образом, прежде чем без проблем.

Не определенно для этого вопроса как такового, но на тему разбора XML в контексте iPhone в целом вы также можете найти this blog entry of mine.

+0

Это необязательно, да, и его следует опустить, если это всего лишь 1.0/UTF-8. Хотя технически Декларация XML не является инструкцией по обработке, хотя она выглядит как одна. – bobince

+0

Да, я думал, что кто-то подобрал бы это - не мог думать о лучшем способе ссылаться на него, но точность важна, вы правы. – philsquared

+0

Thank You Phil :) Мне это было интересно! тем более, что вы перенесите часть материала SAX на уровень абстракции вверх, что, несомненно, пригодится. – RickiG

1

Заголовки не являются обязательными, но вы можете вставить соответствующие заголовки самостоятельно, если это необходимо:

NSString *header = @"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; 
NSString *xml = [NSString stringWithFormat:@"%@\n%@", header, response); 
NSData *data = [xml dataUsingEncoding:NSUTF8StringEncoding]; 
NSXMLParser *praser = [NSXMLParser initWithData:data]; 
+0

Спасибо за предложение/код notnoop! Для моего использования я предпочел бы просто продолжить синтаксический анализ, но, я думаю, если бы я передавал это объекту, который бы принимал только «реальный» xml, это был бы путь. – RickiG