Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][XML][PHP]zliczenie elementów i pasek postępu
Forum PHP.pl > Forum > Przedszkole
wpaski
Moje pytanie jest odnośnie dużych plików XML które są parsowane za pomocą XMLReader, a więc nie są wczytywane do pamięci.
Czy w takim przypadku można w jakiś sposób najpierw zliczyć te węzły które nas interesują? W XMLReader można by to zrobić przepuszczając całe parsowanie przed właściwym parsowaniem (czyli dwa razy parsuje duży plik) w którym np. $i++ zliczałaby to co nas interesuje.

W SimpleXML
  1. $xml = simplexml_load_string($feed);
  2. echo count($xml->element);


takie coś od razu daje mi liczbę wszystkich elementów, które będę parsować - ale przy wielkich plikach XML stosuje się XMLReader.
Ewentualnie użyć SimpleXML i załadować to wszystko do pamięci i policzyć jak powyżej, a potem parsować w XMLReader.

Pytam pod takim kątem, że np. podczas przebiegu parsera chciałbm widzieć pasek postępu - w ajaxie, a do tego potrzebna mi jest na początku liczba wszystkich parsowanych elementów.
A jak Wy myślicie?
markuz
Może idź na skróty i zrób tak:
- Sprawdź dla X plików stosunek elementów do wagi XML`a
- Potem mnóż ilość pobranych elementów przez ten wskaźnik i obliczaj % na podstawie wielkości pliku XML

Zaoszczędzisz procesorowi pracy i będziesz miał poglądowy % (nie będzie super dokładny, ale według mnie wystarczający).
wpaski
Cytat
Sprawdź dla X plików stosunek elementów do wagi XML`a


Nie rozumiem, możesz jaśniej? Jakiś przykład?
Mam sprawdzić ile zajmuje/waży jeden element który mnie interesuje w XMLU?
Turson
Chodzi o sprawdzenie ile parsuje się plik ważacy np. 100KB, ile 1MB, ile 5MB itd. wtedy obliczysz propocje i mniej więcej będziesz wiedział jak pasek postepu ma zasuwać
markuz
Np. XML ważący 5 MB ma 1000 elementów, dzięki czemu wiesz, że 1 element waży około (5 / 1000) MB - teraz dajmy na to twój inny plik XML ma 10 MB wtedy robisz:
10 * ( 5 / 1000) = X - ilość elementów w tym pliku (mniej więcej).
Oczywiście tą średnią wagę 1 elementu (w powyższym przypadku 0.005) wylicz sobie z np. 10 plików i oblicz średnią dla nich.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.