Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z XML jak wyciągnąć dane ...., Problem z wyciągnieciem danych z XML
Ardo
post
Post #1





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 16.03.2008

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


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 (IMG:style_emoticons/default/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.

Go to the top of the page
+Quote Post
amii
post
Post #2





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


  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. }


Ten post edytował amii 14.12.2011, 13:09:30
Go to the top of the page
+Quote Post
mortus
post
Post #3





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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.
Go to the top of the page
+Quote Post
Ardo
post
Post #4





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 16.03.2008

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


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
Go to the top of the page
+Quote Post
mortus
post
Post #5





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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.
Go to the top of the page
+Quote Post
Ardo
post
Post #6





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 16.03.2008

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


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
Go to the top of the page
+Quote Post
mortus
post
Post #7





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


  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.
Go to the top of the page
+Quote Post
Ardo
post
Post #8





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 16.03.2008

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


wysłałem prywatną wiadomość do ciebie zerknij i daj znać co otym sądzisz.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.09.2025 - 20:33