Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z XML jak wyciągnąć dane ....
Forum PHP.pl > Forum > XML, AJAX
Ardo
Witam
Jestem początkujący, dlatego proszę o wyrozumiałość za pytania jakie kieruje dla jednych to proste dla mnie jednak nie do przejscia.
Mam problem z wyciągnięciem danych z XML chodzi dokładnie o tą część kodu:

Proszę o pomoc jak można zapisać wyciagnięcie tych zdjęć

Plik XML tak wygląda:
  1. <dane>
  2. <record>
  3. <numer_oferty>3_165690</numer_oferty>
  4. <zdjecia>
  5. <1>true</1>
  6. <2>true</2>
  7. <3>true</3>
  8. <4>true</4>
  9. <5>false</5>
  10. <6>false</6>
  11. <7>false</7>
  12. <8>false</8>
  13. <9>false</9>
  14. <10>false</10>
  15. <11>false</11>
  16. <12>false</12>
  17. <13>false</13>
  18. <14>false</14>
  19. <15>false</15>
  20. </zdjecia>
  21. </record>
  22.  
  23. <record>
  24. <numer_oferty>3_169990</numer_oferty>
  25. <zdjecia>
  26. <1>true</1>
  27. <2>true</2>
  28. <3>true</3>
  29. <4>true</4>
  30. <5>true</5>
  31. <6>true</6>
  32. <7>true</7>
  33. <8>true</8>
  34. <9>false</9>
  35. <10>false</10>
  36. <11>false</11>
  37. <12>false</12>
  38. <13>false</13>
  39. <14>false</14>
  40. <15>false</15>
  41. </zdjecia>
  42. </record>
  43. </dane>
  44.  

zdjęcia mają nazwy: 165690_1.jpg 165690_2.jpg 165690_3.jpg 165690_4.jpg , czyli numer_oferty + nr zdjęcia

napisałem coś takiego, ale to nie to zapisuje tylko true badz false a ja musze mieć nazwy plików pełne sad.gif


  1. foreach ($dane->record->zdjecia->zdjecia as $zdjecia)
  2. {
  3. $thisDom['zdjecia'][] = $zdjecia;
  4. }
  5.  


prosze o pomoc jak tą część XML wyciągnąć (xml ma true bądź false a nie nazwy plików )


będę wdzięczny za wszelką pomoc.

amii
  1. $dir = 'katalog'; //przykładowy katalog
  2. $directory = opendir($dir); //zaczytujesz pliki xml z katalogu
  3. while($item = readdir($directory)){
  4. if(($item != ".") && ($item != "..")){
  5. $table[] = $item;
  6. }
  7.  
  8. foreach($table as $key => $value) {
  9. $doc = new DOMDocument();
  10. @$doc->load($dir.'/'.$value);
  11. $zwrotka['oferta'][] = $doc->getElementsByTagName('numer_oferty')->item(0)->nodeValue; //tu sobie obrabiasz
  12. }
mortus
Przede wszystkim Twój dokument XML nie jest poprawny składniowo, bo nazwy znaczników nie mogą rozpoczynać się m. in. cyfrą, jak Twoje numery zdjęć. Rozumiem, że true oznacza, że odpowiednie zdjęcie jest, a false, że go nie ma... tylko po co zapisywać informację o czymś, czego nie ma. Moim zdaniem struktura tego XML wymaga przemyślenia. Może zamiast znaczników <1>, <2>, itd. użyj atrybutów.

Jeśli nawet Twój skrypt to sparsuje, ale dane w formie pliku XML będą dostępne z zewnątrz, to ktoś, kto potencjalnie zechce użyć Twojego źródła XML będzie miał kłopoty z jego wykorzystaniem ze względu na brak poprawności i zgodności ze standardami. Przemyśl to.
Ardo
Witam,

dziękuje za informacje, ja wiem ze nie jest poprawny, XML jest z gratki, i nic z nim nie moge zrobić, nie mam pomysłu jak zaciągnąć taki XML bo za każdym razem wyskakuj błąd <1> </1> w tym miejscu

może jakś rada pomysł jak można taki XML załadować


próbowałem:
  1. $product = simplexml_load_file ($hurtownia[0]);
  2. //i
  3. $product = simplexml_load_string ($hurtownia[0]);
  4. //oraz tak
  5. $xml = file_get_contents($hurtownia[0]);


za kazdym razem bład
mortus
Zdaje się, że ktoś już radził, abyś użył file_get_contents(), pozmieniał tagi <x> i </x> (gdzie x to liczba jedno lub dwucyfrowa) na jakieś inne i przetworzył do xml za pomocą simplexml_load_string(). Odpowiedni kod:
  1. $patterns = array(
  2. 0 => '#\<([0-9]{1,2})\>#',
  3. 1 => '#\<\/[0-9]{1,2}\>#'
  4. );
  5. $replacements = array(
  6. 0 => '<zdjecie nr="\1">',
  7. 1 => '</zdjecie>'
  8. );
  9. $xml = file_get_contents($hurtownia[0]);
  10. $xml = preg_replace($patterns, $replacements, $xml);
  11. $xml = simplexml_load_string($xml);

Powyższy fragment kodu powinien zamienić tagi <x> i </x> (gdzie x to liczba jedno lub dwucyfrowa) na tagi <zdjecie nr="x"> i </zdjecie>.
No i z tym już nie powinno być problemu.
Ardo
Dziękuje już błąd nie wyskakuje mam tylko jeszcze małą prośbę zas tego teraz będzie tak wyglądał :

  1. $patterns = array(
  2. 0 => '#\<([0-9]{1,2})\>#',
  3. 1 => '#\<\/[0-9]{1,2}\>#'
  4. );
  5.  
  6. $replacements = array(
  7. 0 => '<zdjecie nr="\1">',
  8. 1 => '</zdjecie>'
  9. );
  10.  
  11. $xml = file_get_contents($hurtownia[0]);
  12. $xml = preg_replace($patterns, $replacements, $xml);
  13. $xml = simplexml_load_string($xml);
  14.  
  15. foreach ($xml->record->zdjecie->nr as $zdjecie)
  16. {
  17. print $zdjecie.":".$zdjecie["nr"];
  18. $thisDom['zdjecie'][] = $zdjecie;
  19. }


możesz mi jeszcze w tym pomoc
mortus
  1. echo '<pre>';
  2. foreach($xml->record->zdjecia->zdjecie as $zdjecie) {
  3. $thisDom['zdjecia'][] = $xml->record->numer_oferty . '_' . $zdjecie['nr'] . '.jpg';
  4. }
  5. print_r($thisDom);

Pamiętaj tylko, że to wyciągnie nazwy zdjęć dla jednej oferty. Aby wyciągnąć nazwy dla wszystkich ofert trzeba podwójnej pętli.
Ardo
wysłałem prywatną wiadomość do ciebie zerknij i daj znać co otym sądzisz.
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.