Streaming von NSXMLParser mit NSInputStream
Aktualisieren:
Beim BenutzenNSXMLParser
KlassenmethodeinitWithContentsOfURL
Anstatt beim Herunterladen des XML-Feeds eine Syntaxanalyse durchzuführen, wird anscheinend versucht, die gesamte XML-Datei in den Speicher zu laden und erst dann den Syntaxanalyseprozess zu starten. Dies ist problematisch, wenn der XML-Feed groß ist (übermäßiger RAM-Verbrauch, inhärent ineffizient, da das Parsen nicht parallel zum Download, sondern erst nach Abschluss des Downloads usw. gestartet wird).
Hat jemand herausgefunden, wie man den Feed beim Streamen zum Gerät analysiert?NSXMLParser
? Ja, du kannst verwendenLibXML2
(wie unten besprochen), aber es scheint möglich zu sein, es mit zu tunNSXMLParser
. Aber es entgeht mir.
Ursprüngliche Frage:
Ich habe mit dem Benutzen gerungenNSXMLParser
um XML aus einem Webstream zu lesen. Wenn du benutztinitWithContentsOfURL
Obwohl die Schnittstelle möglicherweise darauf schließen lässt, dass sie das XML aus dem Web streamen würde, scheint sie dies nicht zu tun, sondern eher zu versuchen, die gesamte XML-Datei zuerst zu laden, bevor ein Parsing stattfindet. Für kleine XML-Dateien ist das in Ordnung, für sehr große dagegen problematisch.
Ich habe Diskussionen über die Verwendung gesehenNSXMLParser
in Verbindung mitinitWithStream
mit einigen angepasstNSInputStream
das ist Streaming aus dem Web. Es gab zum Beispiel Antworten darauf, die darauf hindeuten, so etwas wie das zu verwendenCFStreamCreateBoundPair
bezeichnet in derfolgenden Cocoa Builder Beitrag und die Diskussion vonEinrichten von Socket-Streams im ApfelStream-Programmieranleitung, aber ich habe es nicht zum Laufen gebracht. Ich habe sogar versucht, meine eigene Unterklasse zu schreibenNSInputStream
das benutzte aNSURLConnection
(was selbst ziemlich gut im Streamen ist), aber ich war nicht in der Lage, es in Verbindung mit zum Laufen zu bringenNSXMLParser
.
Am Ende habe ich beschlossen, zu verwendenLibXML2
eher, alsNSXMLParser
, wie im Apple gezeigtXMLPerformance-Beispiel, aber ich habe mich gefragt, ob irgendjemand Glück gehabt hat, Streaming von einer Webquelle zu bekommen, mit der er arbeitetNSXMLParser
. Ich habe viel gesehen, was "theoretisch" möglich istx"Art von Antworten, schlägt alles ausCFStreamCreateBoundPair
zu packen dieHTTPBodyStream
vonNSURLRequest
, aber ich habe noch keine funktionierende Demonstration von Streaming mitNSXMLParser
.
Der Ray Wenderlich ArtikelSo wählen Sie den besten XML-Parser für Ihr iPhone-Projekt scheint das zu bestätigenNSXMLParser
ist nicht gut geeignet für große XML-Dateien, aber mit allen möglichen Beiträgen überNSXMLParser
Workarounds zum Streamen sehr großer XML-Dateien. Ich bin überrascht, dass ich noch keine funktionierende Demonstration dafür gefunden habe. Kennt jemand eine funktionierendeNSXMLParser
Implementierung, die aus dem Web stammt? Klar, ich kann einfach dabei bleibenLibXML2
oder ein anderer äquivalenter XML-Parser, aber der Begriff des Streamings mitNSXMLParser
scheint spannend nah.