Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: XML parsowanie simplexml
Forum PHP.pl > Forum > XML, AJAX > XML
bdhpl
Mam taki xml:

  1. <o id="329">
  2. <cat>
  3. Biuro i firma/Biuro/Meble biurowe/Biurka
  4. </cat>
  5. <name> BIURKO JAY OLCHA </name>
  6.  
  7. <attrs>
  8. <a name="Producent">producent</a>
  9. <a name="Kod_producenta">kod</a>
  10. </attrs>
  11. </o>



i taki php
  1. foreach($xml->children() as $child) {
  2.  
  3. // $role = $child->attributes();
  4.  
  5. foreach($child as $key) {
  6.  
  7.  
  8.  
  9. echo $key['id'];
  10. echo "<br>";
  11. echo $key->cat;
  12. echo "<br>";
  13. echo $key->name;
  14. echo "<br>";
  15. echo $key['weight'];
  16. echo "<br>";
  17. //
  18. foreach($key->imgs->children() as $imgs)
  19. {
  20. echo $imgs['url'];
  21. echo "<br>";
  22. }
  23. foreach($key->attrs->attributes() as $attrs)
  24. {
  25. echo $attrs->a;
  26. echo "<br>";
  27.  
  28.  
  29. }
  30.  
  31. }
  32. }


Jak wyciągnąc wartość producent
kreatiff
Nie wiem co z tą pętlą (wygląda mi jakoś dziwnie, dużo odwołań do nieistniejących węzłów, brak sprawdzania, czy dany węzeł ma dzieci czy nie, tylko od razu foreach), ale by dobrać się do tego, co chcesz, to wystarczy:
  1. echo $child->attrs[0]->a[0];

Albo skorzystać z xpath, gdy kolejność węzłów może nie być zawsze taka sama:
  1. echo (string)$child->xpath("attrs/a[@name = 'Producent']")[0];
kreatiff
Co to znaczy nie działa?
Kod PHP, który wkleiłeś jest niekompletny. Założyłem, że już ładujesz ten plik do obiektu klasy SimpleXMLElement (na to wskazuje metoda children() oraz attributes() wykorzystane w pętli).
Napisz konkretnie co interesuje Ciebie z tego pliku (jakie dane chcesz sobie wydrukować na ekranie), bo pętla wskazuje, że wszystko, a pytasz tylko o producenta.
Chodzi o wyświetlenie tylko nazwy producenta dla konkretnego id?

PS usuń link do pliku, bo ci go wyszukiwarki zaindeksują niepotrzebnie.
bdhpl
  1. $xml = simplexml_load_file("plik.xml");
  2.  
  3.  
  4.  
  5. foreach($xml->children() as $child) {
  6.  
  7.  
  8.  
  9. echo (string)$child->xpath("group/attrs/a[@name = 'Producent']")[0];
  10. echo $child->attrs[0]->a[0];
  11.  
  12.  
  13. // $role = $child->attributes();
  14.  
  15. foreach($child as $key) {
  16.  
  17.  
  18.  
  19. echo $key['id'];
  20. echo "<br>";
  21. echo $key->cat;
  22. echo "<br>";
  23. echo $key->name;
  24. echo "<br>";
  25. echo $key['weight'];
  26. echo "<br>";
  27. //
  28. foreach($key->imgs->children() as $imgs)
  29. {
  30. echo $imgs['url'];
  31. echo "<br>";
  32. }
  33.  
  34.  
  35. }
  36. }


Tak wyglada całość

Chciałbym tak naprawde wszystko z tego wyciągnać,
Najbardziej interesuje mnie z tych atrybutów EAN jeszcze i kod produktu.

Całość chce załądować do mysqla żeby łatwiej mi sie to obrabiało
kreatiff
No to będzie to bardziej skomplikowana pętla, z której od razu najlepiej przypisywać do zmiennych konkretne elementy i je bindować w zapytaniu do bazy.
Tutaj ogólny zarys tego jak ja to widzę tak na szybko:
  1. $xml = simplexml_load_file("plik.xml");
  2. foreach ($xml->xpath('//o') as $child) {
  3.  
  4. // strybuty elementu <o>
  5. foreach ($child->attributes() as $name => $attribute) {
  6. echo "$name: $attribute<br>";
  7. }
  8.  
  9. // kategoria
  10. echo 'cat: ' . $child->cat . '<br>';
  11.  
  12. // obrazki
  13. echo 'imgs/main: ' . $child->xpath('imgs/main')[0]->attributes()['url'] . '<br>';
  14. foreach ($child->xpath('imgs/i') as $img) {
  15. echo 'imgs/i: ' . $img->attributes()['url'] . '<br>';
  16. }
  17.  
  18. // i reszta węzłów analogicznie jak na powyższych przykładach
  19. }
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-2021 Invision Power Services, Inc.