Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> xmlreader, korzystał ktoś z tego?
marrrecki
post
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Lublin

Ostrzeżenie: (0%)
-----


siemanko. mam problem z klasą xmlreader.
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ę:
  1. <?xml version="1.0" encoding="utf-8"?><katalog><GrupyTowarowe>
  2. <GrupaGlowna id="mat" nazwa="_Materiały reklamowe">
  3. <PodGrupy>
  4. <PodGrupa id="mat-rek" nazwa="Materiały reklamowe" />
  5. </PodGrupy>
  6. </GrupaGlowna>
  7. <GrupaGlowna id="agd" nazwa="AGD - Produkty">
  8. <PodGrupy>
  9. <PodGrupa id="agd-loz" nazwa="Chłodziarko-zamrażarki do zabudowy (lodówki)" />
  10. <PodGrupa id="agd-low" nazwa="Chłodziarko-zamrażarki wolnostojące (lodówki)" />
  11. <PodGrupa id="agd-cze" nazwa="Czajniki elektryczne" />
  12. <PodGrupa id="agd-exp" nazwa="Ekspresy do kawy" />
  13. <PodGrupa id="agd-kmz" nazwa="Kuchenki mikrofalowe do zabudowy" />
  14. <PodGrupa id="agd-kmw" nazwa="Kuchenki mikrofalowe wolnostojące" />
  15. <PodGrupa id="agd-kwz" nazwa="Kuchnie do zabudowy" />
  16. <PodGrupa id="agd-kws" nazwa="Kuchnie wolnostojące" />
  17. <PodGrupa id="agd-odk" nazwa="Odkurzacze" />
  18. <PodGrupa id="agd-oka" nazwa="Okapy kuchenne" />
  19. <PodGrupa id="agd-piz" nazwa="Piekarniki do zabudowy" />
  20. <PodGrupa id="agd-pgz" nazwa="Płyty grzejne do zabudowy" />
  21. <PodGrupa id="agd-prz" nazwa="Pralki do zabudowy" />
  22. <PodGrupa id="agd-prw" nazwa="Pralki wolnostojące" />
  23. <PodGrupa id="agd-sok" nazwa="Sokowirówki" />
  24. <PodGrupa id="agd-sus" nazwa="Suszarki do włosów" />
  25. <PodGrupa id="agd-zmz" nazwa="Zmywarki do zabudowy" />
  26. <PodGrupa id="agd-zmw" nazwa="Zmywarki wolnostojące" />
  27. <PodGrupa id="agd-zel" nazwa="Żelazka" />
  28. </PodGrupy>
  29. </GrupaGlowna>
  30. </GrupyTowarowe>
  31. <producenci>
  32. <producent id="1CC" nazwa="1C Company" />
  33. <producent id="2KG" nazwa="2K Games" />
  34. <producent id="3CO" nazwa="3COM" />
  35. <producent id="3M-" nazwa="3M" />
  36. <producent id="3WA" nazwa="3Ware" />
  37. </producenci>
  38. <produkty>
  39. <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" >
  40. <zdjecia>
  41. <zdjecie plik="/Pictures/ADA/ADA/ADAIBOADA0001/1.jpg" domyslne="1" data="2007-03-01" />
  42. </zdjecia>
  43. <technika>
  44. <parametr nazwa="Złącza" opis="2x USB A męski &lt;-&gt; SATA" jm="" typ="varchar" />
  45. <parametr nazwa="Długość kabla połączeniowego" opis="0,80" jm="m" typ="float" />
  46. <parametr nazwa="Kolor" opis="srebrny" jm="" typ="varchar" />
  47. <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" />
  48. <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" />
  49. <parametr nazwa="Informacje dodatkowe" opis="Transfer do 480Mb/s, aluminiowa obudowa" jm="" typ="varchar" />
  50. <parametr nazwa="www" opis="http://www.i-box.pl" jm="" typ="varchar" />
  51. </technika>
  52. </produkt>
  53. <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" >
  54. <zdjecia>
  55. <zdjecie plik="/Pictures/ZAS/BAT/ZASVERBAT0007/1.jpg" domyslne="1" data="2007-06-14" />
  56. </zdjecia>
  57. <technika>
  58. <parametr nazwa="Rozmiar baterii" opis="R14" jm="" typ="varchar" />
  59. <parametr nazwa="Napięcie" opis="1,5" jm="V" typ="float" />
  60. <parametr nazwa="Opis" opis="Baterie Alkaliczne, na blistrze są 4 szt baterii." jm="" typ="varchar" />
  61. </technika>
  62. </produkt>
  63. <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" >
  64. <zdjecia>
  65. <zdjecie plik="/Pictures/ZAS/BAT/ZASVERBAT0008/1.jpg" domyslne="1" data="2007-06-12" />
  66. <zdjecie plik="/Pictures/ZAS/BAT/ZASVERBAT0008/2.jpg" domyslne="1" data="2007-06-12" />
  67. </zdjecia>
  68. <technika>
  69. <parametr nazwa="Rozmiar baterii" opis="R20" jm="" typ="varchar" />
  70. <parametr nazwa="Napięcie" opis="1,5" jm="V" typ="float" />
  71. <parametr nazwa="Opis" opis="Baterie Alkaliczne, na blistrze są 2 szt baterii." jm="" typ="varchar" />
  72. </technika>
  73. </produkt>
  74. </produkty>
  75. </katalog>

Wiadomo, że przy parsowaniu xmlreaderem korzystamy z pętli while:
  1. <?php
  2. while ($xml->read()) {
  3. $id = $xml->getAttribute('id');
  4. $name = $xml->getAttribute('nazwa');
  5. $opis = $xml->getAttribute('opis');
  6. $plik = $xml->getAttribute('plik');
  7. }
  8. ?>

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 biggrin.gif
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 02:11