Потоковая передача NSXMLParser с помощью NSInputStream
Обновить:
Когда используешьNSXMLParser
метод классаinitWithContentsOfURL
вместо синтаксического анализа при загрузке XML-канала он пытается загрузить весь XML-файл в память и только затем запустить процесс синтаксического анализа. Это проблематично, если подача XML велика (использование чрезмерного объема ОЗУ, по своей сути неэффективно, поскольку вместо анализа параллельно с загрузкой, он начинает анализ только после завершения загрузки и т. Д.).
Кто-нибудь обнаружил, как анализировать, как поток передается на устройство с помощьюNSXMLParser
? Да, вы можете использоватьLibXML2
(как обсуждается ниже), но кажется, что это должно быть возможно сделать сNSXMLParser
, Но это ускользает от меня.
Оригинальный вопрос:
Я боролся с использованиемNSXMLParser
читать XML из веб-потока. Если вы используетеinitWithContentsOfURL
в то время как интерфейс может привести к выводу о том, что он будет передавать XML из Интернета, он, похоже, этого не делает, а скорее пытается сначала загрузить весь XML-файл, прежде чем произойдет какой-либо анализ. Для XML-файлов небольшого размера это хорошо, но для действительно больших это проблематично.
Я видел обсуждение использованияNSXMLParser
в сочетании сinitWithStream
с некоторыми настроеннымиNSInputStream
это потоковое из Интернета. Например, были ответы на это, которые предлагают использовать что-то вродеCFStreamCreateBoundPair
упоминается вследующая запись Cocoa Builder и обсуждениеНастройка потоков сокетов в яблокеРуководство по программированию потоков, но я не получил его на работу. Я даже пытался написать свой собственный подклассNSInputStream
что использовалNSURLConnection
(что само по себе довольно хорошо для потоковой передачи), но я не смог заставить его работать вместе сNSXMLParser
.
В итоге я решил использоватьLibXML2
скорее, чемNSXMLParser
, как продемонстрировано в AppleПример XMLPerformance, но мне было интересно, если кому-то повезло получить потоковую передачу из веб-источника, работающего сNSXMLParser
, Я видел много "теоретически вы могли бы сделатьxвроде ответов, предлагая все отCFStreamCreateBoundPair
чтобы схватитьHTTPBodyStream
изNSURLRequest
, но я еще не сталкивался с рабочей демонстрацией потоковой передачи сNSXMLParser
.
Статья Рэя ВендерлихаКак выбрать лучший XML-парсер для вашего iPhone проекта кажется, подтверждает, чтоNSXMLParser
не очень подходит для больших файлов XML, но со всеми постами о возможномNSXMLParser
Обходные пути для потоковой передачи действительно больших XML-файлов, я удивлен, что мне еще не удалось найти рабочую демонстрацию этого. Кто-нибудь знает о функционированииNSXMLParser
реализация, которая течет из Интернета? Ясно, я могу просто придерживатьсяLibXML2
или некоторый другой эквивалентный синтаксический анализатор XML, но понятие потоковой передачи сNSXMLParser
кажется близлежащим.