Потоковая передача 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
, Я'видел много "теоретически вы могли бы сделать х " вроде ответов, предлагая все отCFStreamCreateBoundPair
чтобы схватитьHTTPBodyStream
отNSURLRequest
, но я'Мы еще не сталкивались с рабочей демонстрацией потоковой передачи.NSXMLParser
Статья Рэя ВендерлихаКак выбрать лучший XML-парсер для вашего iPhone проекта кажется, подтверждает, чтоNSXMLParser
не очень подходит для больших файлов XML, но со всеми постами о возможномNSXMLParser
Обходные пути для потоковой передачи действительно больших файлов XML, яЯ удивлен, что мне еще предстоит найти рабочую демонстрацию этого. Кто-нибудь знает о функционированииNSXMLParser
реализация, которая течет из Интернета? Ясно, я могу просто придерживатьсяLibXML2
или некоторый другой эквивалентный синтаксический анализатор XML, но понятие потоковой передачи сNSXMLParser
кажется близлежащим.