2017-02-15 5 views
1

Ich integriere eine API von Drittanbietern, die etwa 20 MB Daten für jede Suche zurückgibt. Es gibt ungefähr 500 Artikel zurück. Das sind zu viele Daten für mich. Also, ich möchte nur die ersten 50 Elemente verwenden.bekomme nur das erste N-Element des großen XML-Objekts

Mein Versuch:

$xml = simplexml_load_string($apiRequest); 
$object = json_decode(json_encode($xml)); 
$items = array_slice($object, 0, 50); 

Ungefähre Reaktionszeit von der API ist um 50 Sekunden (wenn ich auf Postbote getestet). Nachdem die Antwort empfangen wurde, wird die Konvertierung in das Standardobjekt und andere Berechnungen verlangsamt. Also, ich möchte beschleunigen. Ich möchte die erhaltene XML-Antwort aufteilen, die ersten 50 Elemente erhalten und sie dann in ein Standard-Objekt konvertieren. Gibt es einen Weg, es zu tun? Andere Vorschläge werden sehr geschätzt.

+0

Die meisten APIs können Sie einen Parameter hinzufügen, um die Anzahl der Ergebnisse zu begrenzen, so dass Sie nicht nur die Zeit für die Konvertierung, sondern auch die Empfangszeit verbessern konnten. –

+0

Vermeiden Sie die Serialisierung zu JSON und lesen Sie die XML-Datei direkt. Verwenden Sie die XMLReader-Klasse. Es ist die aktuelle Standard-API für diese großen Dateien. – ThW

+0

Ich habe mit meinem Provider @lukegv kommunizieren, kann ich nicht die Anzahl der Ergebnisse begrenzen. Also, ich habe vor der Ausgabe – vijayrana

Antwort

-1

Wenn ich eine so große XML-Antwort analysieren würde, würde ich es mit einem Stream-Parser tun.

Ich habe keine Erfahrung mit einem, aber eine schnelle Google-Suche zeigt auf https://github.com/prewk/xml-string-streamer.

Geben Sie es eine Chance und wenn Sie spezifische Probleme haben, dann können wir versuchen, das zu lösen.

+0

Danke für den Link @avk Dai – vijayrana