Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> XML parsowanie simplexml
bdhpl
post 28.10.2020, 12:48:19
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 17.04.2009

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


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
Go to the top of the page
+Quote Post
kreatiff
post 28.10.2020, 13:37:59
Post #2





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

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


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];


Ten post edytował kreatiff 28.10.2020, 13:48:58
Go to the top of the page
+Quote Post
kreatiff
post 28.10.2020, 14:29:26
Post #3





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

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


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.

Ten post edytował kreatiff 28.10.2020, 14:41:14
Go to the top of the page
+Quote Post
bdhpl
post 28.10.2020, 17:34:29
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 17.04.2009

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


  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

Ten post edytował bdhpl 28.10.2020, 17:36:01
Go to the top of the page
+Quote Post
kreatiff
post 28.10.2020, 21:50:21
Post #5





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

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


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

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 Wersja Lo-Fi Aktualny czas: 28.03.2024 - 14:46