Proste xml'e przechodzą gładko przez ten parser i nie ma problemu ze stworzeniem tablicy wynikowej z parsowanego xml'a. Ale co zrobić w przypadku gdy mój xml ma taką strukturę:
<?xml version="1.0" encoding="utf-8"?><katalog><GrupyTowarowe> <GrupaGlowna id="mat" nazwa="_Materiały reklamowe"> <PodGrupy> <PodGrupa id="mat-rek" nazwa="Materiały reklamowe" /> </PodGrupy> </GrupaGlowna> <GrupaGlowna id="agd" nazwa="AGD - Produkty"> <PodGrupy> <PodGrupa id="agd-loz" nazwa="Chłodziarko-zamrażarki do zabudowy (lodówki)" /> <PodGrupa id="agd-low" nazwa="Chłodziarko-zamrażarki wolnostojące (lodówki)" /> <PodGrupa id="agd-cze" nazwa="Czajniki elektryczne" /> <PodGrupa id="agd-exp" nazwa="Ekspresy do kawy" /> <PodGrupa id="agd-kmz" nazwa="Kuchenki mikrofalowe do zabudowy" /> <PodGrupa id="agd-kmw" nazwa="Kuchenki mikrofalowe wolnostojące" /> <PodGrupa id="agd-kwz" nazwa="Kuchnie do zabudowy" /> <PodGrupa id="agd-kws" nazwa="Kuchnie wolnostojące" /> <PodGrupa id="agd-odk" nazwa="Odkurzacze" /> <PodGrupa id="agd-oka" nazwa="Okapy kuchenne" /> <PodGrupa id="agd-piz" nazwa="Piekarniki do zabudowy" /> <PodGrupa id="agd-pgz" nazwa="Płyty grzejne do zabudowy" /> <PodGrupa id="agd-prz" nazwa="Pralki do zabudowy" /> <PodGrupa id="agd-prw" nazwa="Pralki wolnostojące" /> <PodGrupa id="agd-sok" nazwa="Sokowirówki" /> <PodGrupa id="agd-sus" nazwa="Suszarki do włosów" /> <PodGrupa id="agd-zmz" nazwa="Zmywarki do zabudowy" /> <PodGrupa id="agd-zmw" nazwa="Zmywarki wolnostojące" /> <PodGrupa id="agd-zel" nazwa="Żelazka" /> </PodGrupy> </GrupaGlowna> </GrupyTowarowe> <producenci> <producent id="1CC" nazwa="1C Company" /> <producent id="2KG" nazwa="2K Games" /> <producent id="3CO" nazwa="3COM" /> <producent id="3M-" nazwa="3M" /> <producent id="3WA" nazwa="3Ware" /> </producenci> <produkty> <produkt id="ADAIBOADA0001" nazwa="ADAPTER I-BOX SATA na USB ALUMINIOWY" producent="IBO" grupa="AKC-ADA" gwarancja="G024M" cena_netto="41,00" dostepny="ponad 30" dostepny_kra="1" dostepny_kat="0" data="2006-06-06" na_zamowienie="N" oferta_specjalna="N" > <zdjecia> <zdjecie plik="/Pictures/ADA/ADA/ADAIBOADA0001/1.jpg" domyslne="1" data="2007-03-01" /> </zdjecia> <technika> <parametr nazwa="Złącza" opis="2x USB A męski <-> SATA" jm="" typ="varchar" /> <parametr nazwa="Długość kabla połączeniowego" opis="0,80" jm="m" typ="float" /> <parametr nazwa="Kolor" opis="srebrny" jm="" typ="varchar" /> <parametr nazwa="Opis" opis="Łatwy w użyciu konwerter pozwoli na zmianę dysku SATA w funkcjonalne urządzenie pamięci USB zgodne ze standardem USB 2.0, pozwalając tym samym na szybkie przenoszenie i wymianę danych pomiędzy komputerem PC, Mac lub Notebookiem, a dyskiem SATA o dowolnej" jm="" typ="varchar" /> <parametr nazwa="Opis" opis="pojemności. Wbudowane diody LED informują o pracy podłączonego dysku, a dodatkowa funkcja RESET pozwala na szybkie wykrycie dysku wyłączonego lub nieużywanego." jm="" typ="varchar" /> <parametr nazwa="Informacje dodatkowe" opis="Transfer do 480Mb/s, aluminiowa obudowa" jm="" typ="varchar" /> <parametr nazwa="www" opis="http://www.i-box.pl" jm="" typ="varchar" /> </technika> </produkt> <produkt id="ZASVERBAT0007" nazwa="BATERIE ALKAICZNE VERBATIM LR14 C (2SZT)" producent="VER" grupa="ZAS-BAT" gwarancja="G001M" cena_netto="4,68" dostepny="ponad 30" dostepny_kra="0" dostepny_kat="0" data="2007-05-31" na_zamowienie="N" oferta_specjalna="N" > <zdjecia> <zdjecie plik="/Pictures/ZAS/BAT/ZASVERBAT0007/1.jpg" domyslne="1" data="2007-06-14" /> </zdjecia> <technika> <parametr nazwa="Rozmiar baterii" opis="R14" jm="" typ="varchar" /> <parametr nazwa="Napięcie" opis="1,5" jm="V" typ="float" /> <parametr nazwa="Opis" opis="Baterie Alkaliczne, na blistrze są 4 szt baterii." jm="" typ="varchar" /> </technika> </produkt> <produkt id="ZASVERBAT0008" nazwa="BATERIE ALKAICZNE LR20 D (2SZT)" producent="VER" grupa="ZAS-BAT" gwarancja="G001M" cena_netto="5,88" dostepny="ponad 30" dostepny_kra="0" dostepny_kat="0" data="2007-05-31" na_zamowienie="N" oferta_specjalna="N" > <zdjecia> <zdjecie plik="/Pictures/ZAS/BAT/ZASVERBAT0008/1.jpg" domyslne="1" data="2007-06-12" /> <zdjecie plik="/Pictures/ZAS/BAT/ZASVERBAT0008/2.jpg" domyslne="1" data="2007-06-12" /> </zdjecia> <technika> <parametr nazwa="Rozmiar baterii" opis="R20" jm="" typ="varchar" /> <parametr nazwa="Napięcie" opis="1,5" jm="V" typ="float" /> <parametr nazwa="Opis" opis="Baterie Alkaliczne, na blistrze są 2 szt baterii." jm="" typ="varchar" /> </technika> </produkt> </produkty> </katalog>
Wiadomo, że przy parsowaniu xmlreaderem korzystamy z pętli while:
<?php while ($xml->read()) { $id = $xml->getAttribute('id'); $name = $xml->getAttribute('nazwa'); $opis = $xml->getAttribute('opis'); $plik = $xml->getAttribute('plik'); } ?>
Ale w każdym przypadku zwracana tablica zawiera ileś tam tablic w sobie i nie sposób tego połączyć w całość. Ma ktoś jakieś doświadczenie w tym temacie? Google tutaj wiele nie radzi. Owszem napisałem skrypt który wykonuje to czego potrzebuje, ale użyłem do tego simplexml_load_file(), ale to nie sposób bo plik który parsuje ma 40MB, a przy simplexml_load_file() całość ładowana jest do ramu i strasznie obciąża serwer przy samym parsowaniu, a ja jeszcze dane z xml'a muszę wrzucić do mysql'a.
Za dobrą poradę stawiam piwko
