Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: simplexml + MySql + wielki plik xml
Forum PHP.pl > Forum > PHP > Object-oriented programming
Apo
Witam
Jestem w trakcie pracy nad większym projektem i mam problem. Jest sobie na dysku program który generuje plik xml ze swoich danych (oferty). Plik ten ma conajmniej kilkaset tysięcy linii (ok 40mb). I odnośnie tego mam kilka pytań.

Musze zrobić tak że skrypt odczytuje przez simplexml plik .xml i zapisuje zawartość do odpowiednich tabel w bazie danych a potem odpowiednich pól (czyli pętle i instrukcje warunkowe aby wszystko zapisac w odpowiednie miejsca). No i nie wiem jak rozwiązać problem szybkości, bo wiadomo z taką ilością informacji trwa to bardzo długo (kilka minut do kilkudziesięciu). Elementy pliku xml mają kilka postaci (dla odpowiednich ofert inne pola):
Przykład:
  1. <main>
  2.  
  3. <record>
  4.             <id>23254</id>
  5.             <dd>1350</dd>
  6.             <form>6</form>
  7. </record>
  8. <record>
  9.             <numer>23254</numer>
  10.             <adres>1350</adres>
  11.             <form>6</form>
  12.             <liczba_p>l154</liczba_p>
  13. </record>
  14.  
  15. </main>


Chciałem się dowiedzieć jak można maksymalnie zoptymalizować taki proces (może coś innego niż simplexml), wasze różne pomysły i sugestie. (nie mogę nic zmieniać z plikiem xml) i dlaczego wywala błędy kiedy simplexml nadrafi na znak "&" czy można to jakoś usunąć czy tylko zamienić na "&amp". Aha i nie mam dostępu do serwera, czyli nic nie moge doinstalować, ewentualnie klasy itp.

Pozdro
splatch
Odpowiedzią na Twoje pytanie jest SAX. Wymaga on od programisty trochę więcej niż SimpleXML czy też DOM, ale jest najlepszy przy odczycie tak dużych plików. Nie wczytuje on całego pliku do pamięci.
Przy takiej strukturze dokumentu SAX na pewno sobie poradzi (wersja parsera XML, która jest w php dziwnie obsługuje przestrzenie nazw).

PS. masz kod w złym tagu, chyba jest od tego XML?
Apo
Macie może jakiś ciekawe linki o SAX ? Na forum za dużo informacji o tym nie ma. Przejżałem manual i znalazłem o tym rodział w książce ale tylko 2 strony sad.gif
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.