Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML+PHP] Wyciągnięcie danych z XML
Forum PHP.pl > Forum > XML, AJAX > XML
przemek_el
Witam.

Mam plik xml z danymi produktów, potrzebuję te produkty przenieść do sklepu który posiada bazę MYSQL, Samo dodanie do bazy to nie problem tylko nie wiem wogole jak z pliku wyciągnąć dane :/
Plik z kilkoma produktami znajduje się pod adresem:
http://www.arcomp.com.pl/plik.xml

Chodzi o wyciągnięcie jedynie danych produktów, z częsci:
<produkt id="AGDBRAGOL0017" nazwa="Golarka Braun 550 Series 5" producent="BRA" grupa="AGD-GOL" gwarancja="F024M" cena_netto="0,00" dostepny="6" dostepny_kra="0" dostepny_kat="0" data="2008-10-30" na_zamowienie="N" oferta_specjalna="N">
tak aby dane były z zmiennych o nazwach pogrubionych, oraz Aby to co jest między znacznikami:<technika></technika> było w zmiennej np. opis...
np znaczniki:
<parametr nazwa="System golenia" opis="Na sucho" jm="" typ="varchar"/>
<parametr nazwa="System tnący" opis="Rotacyjny" jm="" typ="varchar"/>
<parametr nazwa="Możliwość mycia w wodzie" opis="Mozliwośc mycia pod bieżącą wodą" jm="" typ="varchar"/>

aby w tej zmiennej wygladały tak:
<b>System golenia</b> : Na sucho<br>
<b>System tnący</b>: Rotacyjny<br>
<b>Możliwość mycia w wodzie</b>: Mozliwośc mycia pod bieżącą wodą

Prosiłbym o pomoc. Dodam jeszcze ze plik ma ok 30 mb i trzeba go przetworzyć w całości.
Pozdrawiam
Riklaunim
Wystarczy użyć SimpleXML smile.gif
http://www.php.rk.edu.pl/w/p/simplexml/
http://us2.php.net/simplexml
przemek_el
Pokazał mi się błąd:
Fatal error: Call to undefined function: simplexml_load_string() in /xml/aaa.php on line 8

Wpisałem kod z przykładu:
  1. <?php
  2. $string = <<<XML
  3. <a xmlns:b>
  4.  <foo name="one" game="lonely">1</foo>
  5. </a>
  6. XML;
  7.  
  8. $xml = simplexml_load_string($string);
  9. foreach($xml->foo[0]->attributes() as $a => $b) {
  10.    echo $a,'="',$b,"\"\n";
  11. }
  12. ?>
Riklaunim
Nie masz PHP5, albo bardzo beznadziejną konfigurację PHP5 smile.gif Zmień hosting lub popraw konfigurację PHP jeżeli masz do niej dostęp.
przemek_el
Hmm winksmiley.jpg szkoda ze wcześniej nie wiedziałem że potrzeba php5 ;D wiesz hosting mam dobry bo na home.pl i php5 też jest tylko z powodu starej strony która pod
php5 nie działała jak powinna zostało tam przez plik .htaccess zmieniona wersja php winksmiley.jpg odpaliłem w php5 i testowy kod działa, a jak załadować zewnętrzny xml?

EDIT:
Juz mi się udało załadowac plik winksmiley.jpg i nawet powoli zaczyna mi wyświetlać jakieś dane z mojego pliku xml.
ale jeszcze nie wszystko tak jak powinno winksmiley.jpg

Mam jeden problem i pytanie winksmiley.jpg
Udało mi się wyciągnąc potrzebne dane, ale tylko gdy plik wyglada następująco:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <produkty>
  3. <produkt id="RTVSHATLC0057" nazwa="Telewizor 52&quot; LCD Sharp LC52X20E (Aqous) (Full HD, 3 HDMI)" producent="SHA" grupa="RTV-TLC" gwarancja="F024M" cena_netto="00,00" dostepny="17" dostepny_kra="0" dostepny_kat="0" data="2007-09-27"  na_zamowienie="T"  oferta_specjalna="N"  ostatnia_zmiana="2008-03-26">
  4. <zdjecia>
  5. <zdjecie plik="/Pictures/RTV/TLC/RTVSHATLC0057/4.jpg" domyslne="1" data="2007-09-28" />
  6. </zdjecia>
  7. <technika>
  8. <parametr nazwa="Kod Producenta" opis="LC52X20E" jm="" typ="varchar" />
  9. <parametr nazwa="HD Ready" opis="True" jm="" typ="bit" />
  10. <parametr nazwa="Full HD" opis="True" jm="" typ="bit" />
  11. <parametr nazwa="Procesor dĹşwiÄ™ków" opis="Surround Sound" jm="" typ="varchar" />
  12. <parametr nazwa="Wzmacniacz" opis="2 x 15 W" jm="" typ="varchar" />
  13. <parametr nazwa="Gniazdo HDMI (ilość)" opis="3" jm="szt." typ="int" />
  14. <parametr nazwa="Gniazdo D-Sub 15pin (ilość)" opis="1" jm="szt." typ="int" />
  15. <parametr nazwa="Gniazdo SCART (Eurozłącze) (ilość)" opis="2" jm="szt." typ="int" />
  16. <parametr nazwa="Gniazdo USB (ilość)" opis="1" jm="szt." typ="int" />
  17. <parametr nazwa="Gniazda dodatkowe" opis="CI-Card Slot, RS-232C" jm="" typ="varchar" />
  18. <parametr nazwa="Pilot" opis="True" jm="" typ="bit" />
  19. <parametr nazwa="Telegazeta" opis="True" jm="" typ="bit" />
  20. </technika>
  21. </produkt>
  22. </produkty>

problem pojawia się gdy obejmę to w znaczniki: <katalog><katalog>
Kod strony to:
  1. <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
  2. <?php
  3. $xml = simplexml_load_file('ActionXML_Big.xml');
  4.   for( $y = 0; $y <= 0; $y++ )
  5.    {
  6.    echo '<br>';
  7.    foreach($xml->produkt[$y]->attributes() as $a => $b) {
  8.       echo '<b>',$a,':</b>"',$b,"\"";}
  9.    
  10. for( $x = 0; $x <= 50; $x++ )
  11. {
  12.  
  13. $i=0;
  14.        foreach($xml->produkt[$y]->technika->parametr[$x]->attributes() as $a => $b )
  15.        {
  16.  
  17. if ($a=='nazwa')
  18. {
  19. echo '<b>'.$b.':</b>';
  20. }
  21. if ($a=='opis')
  22. {
  23. echo ' '.$b.' ';
  24. }
  25. if ($a=='jm')
  26. {
  27. echo ' '.$b.'<br>';
  28. }
  29. }
  30. }
  31. }  
  32. ?>


Pokazuje się błąd:
Fatal error: Call to a member function attributes() on a non-object in /xml/aaa.php on line 7
Linia 7 to:
foreach($xml->produkt[$y]->attributes() as $a => $b) {

Co moze być tego powodem? I jeszcze pytanie, jak obliczyć ilość znaczników np
<parametr>? takaby pętla wiedziała do jakiego znacznika maksymalnie moze się odwołać?
Riklaunim
print_r() twoim przyjacielem. Patrz co jest obiektem, a co tablicą a dojdziesz co i jak powinno być zapisane. Sprawdź czy $xml->produkt[$y] zawiera to co cię interesuje itp. debuguj, sprawdzaj smile.gif Ilość <parametr> countem obliczysz na odpowiednim elemencie drzewa simplexml.
przemek_el
Wiesz powoli zaczynam się gubić smile.gif
Wpisałem taki kod php:
  1. <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
  2. <?php
  3. $xml = simplexml_load_file('ActionXML_Big.xml');
  4. echo print_r($xml->katalog);
  5. ?>

a plik xml wyglada następująco:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <katalog>
  3. <produkty>
  4. <produkt id="RTVSHATLC0057" nazwa="Telewizor 52&quot; LCD Sharp LC52X20E (Aqous) (Full HD, 3 HDMI)" producent="SHA" grupa="RTV-TLC" gwarancja="F024M" cena_netto="00,00" dostepny="17" dostepny_kra="0" dostepny_kat="0" data="2007-09-27"  na_zamowienie="T"  oferta_specjalna="N"  ostatnia_zmiana="2008-03-26">
  5. <zdjecia>
  6. <zdjecie plik="/Pictures/RTV/TLC/RTVSHATLC0057/4.jpg" domyslne="1" data="2007-09-28" />
  7. </zdjecia>
  8. <technika>
  9. <parametr nazwa="Kod Producenta" opis="LC52X20E" jm="" typ="varchar" />
  10. <parametr nazwa="Opłata transportowa za LARGE" opis="80,00" jm="" typ="float" />
  11. <parametr nazwa="Format obrazu" opis="16:9" jm="" typ="varchar" />
  12. </technika>
  13. </produkt>
  14. </produkty>
  15. </katalog>

i wyświetliło mi się:
SimpleXMLElement Object ( ) 1

Jak mam to rozumieć?
Riklaunim
print_r nie potrzebuje echo. Główny element XML czyli tutaj "katalog" jest "usuwany" z całego drzewa. Masz od razu listę produktów
Kod
$xml = simplexml_load_string($x);
foreach($xml as $pr)
{
print_r($pr);
print '########################';
}
przemek_el
Bardzo Ci dziękuję za pomoc winksmiley.jpg zostało mi tylko popracować nad kodowaniem, bo plik xml jest w utf8 a baza mysql jest w iso winksmiley.jpg ale to myśle że jakoś uda mi się dopracować winksmiley.jpg

Pozdrawiam winksmiley.jpg
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.