Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML][PHP] Prosty przykład
Forum PHP.pl > Forum > Przedszkole
lordmonkey
witam,
mam taki problem (dopiero zaczynam z XML)
mój plik ksiazki.xml wygląda tak :
  1. <?xml version="1.0" ?>
  2. <!--przykład>-->
  3.  
  4. <Ksiazki>
  5.  
  6. <Ksiazka>
  7. <Tytul>Fajna ksiazka </Tytul>
  8. <Autor>Jan Nowak</Autor>
  9. <InfoWydawnicze>
  10. <Wydawnictwo>Helion</Wydawnictwo>
  11. <Rok>1999</Rok>
  12. <Miejsce>Rybnik</Miejsce>
  13. </InfoWydawnicze>
  14. </Ksiazka>
  15.  
  16. <Ksiazka>
  17. <Tytul>Extra ksiazka </Tytul>
  18. <Autor>Jan Kowalski</Autor>
  19. <InfoWydawnicze>
  20. <Wydawnictwo>Helion</Wydawnictwo>
  21. <Rok>2008</Rok>
  22. <Miejsce>Gliwice</Miejsce>
  23. </InfoWydawnicze>
  24. </Ksiazka>
  25.  
  26. <Ksiazka>
  27. <Tytul>Hobbit </Tytul>
  28. <Autor>Tolkien</Autor>
  29. <InfoWydawnicze>
  30. <Wydawnictwo>Helion</Wydawnictwo>
  31. <Rok>2008</Rok>
  32. <Miejsce>Gliwice</Miejsce>
  33. </InfoWydawnicze>
  34. </Ksiazka>
  35. </Ksiazki>


a plik php wygląda tak :
  1. <?php
  2. $dom = new DomDocument;
  3. $dom->load("ksiazki.xml");
  4.  
  5. foreach($dom->documentElement->childNodes as $ksiazki){
  6. if (($ksiazki->nodeType == 1) && ($ksiazki->nodeName == "Ksiazka")) {
  7.  
  8. foreach($ksiazki -> childNodes as $taKsiazka) {
  9. if(($taKsiazka->nodeType == 1) && ($taKsiazka->nodeName == "Tytul")) {
  10. $taKsiazkaTytul = $taKsiazka->textContent;
  11. }
  12.  
  13. if(($taKsiazka->nodeType == 1) && ($taKsiazka->nodeName == "Autor")) {
  14. $taKsiazkaAutor = $taKsiazka->textContent;
  15. }
  16.  
  17. if(($taKsiazka->nodeType == 1) && ($taKsiazka->nodeName == "InfoWydawnicze")) {
  18. foreach($taKsiazka->childNodes as $teInfoWydawnicze) {
  19.  
  20. if(($teInfoWydawnicze->nodeType == 1) && ($teInfoWydawnicze->nodeName == "Wydawnictwo")) {
  21. $taKsiazkaWydawca = $teInfoWydawnicze->textContent;
  22. }
  23. }
  24. }
  25. }
  26. }
  27. echo "<p><span style=\"text-decoration:underline\">".$taKsiazkaTytul."</span>
  28. autor: ".$taKsiazkaAutor."<br />wydana przez ".$taKsiazkaWydawca."<br /><br /";
  29.  
  30. unset($taKsiazkaTytul);
  31. unset($taKsiazkaAutor);
  32. unset($taKsiazkaWydawca);
  33. }
  34.  
  35.  
  36. ?>


i nie wiem dlaczego ale pokazuje się tylko ostatni rekord z pliku.
Dlaczego?
thek
Jedna zmienna cały czas nadpisywana. Nadal tego nie widzisz?

Jeśli chcesz zwrócić to jako całość wszystkich pozycji to musisz albo przekonwertować to do typu tablicowego, albo obiektowego.

EDIT: No i są wygodniejsze formy niż oblatywanie wszystkiego pętlami. Poczytaj o Xpath
lordmonkey
no używam 3 zmiennych każda ma inną informację, a potem jeszcze daję unset() i następuje kolejna iteracja foreach ale coś mi się zdaję, że się mylę.



//edit :
teraz już widzę . te typisywanie echo'em ma być jadną klamrę } wcześniej i wszystko gra nie smile.gif ?

//edit 2 :
tylko, że teraz dostaję coś takiego :
  1. autor:
  2. wydana przez
  3.  
  4.  
  5. Fajna ksiazka autor: Jan Nowak
  6. wydana przez Helion
  7.  
  8.  
  9. autor:
  10. wydana przez
  11.  
  12.  
  13. Extra ksiazka autor: Jan Kowalski
  14. wydana przez Helion
  15.  
  16.  
  17. autor:
  18. wydana przez
  19.  
  20.  
  21. Hobbit autor: Tolkien
  22. wydana przez Helion
  23.  
  24.  
  25. autor:
  26. wydana przez

thek
Ja bym Ci radził pomyśleć, na jakim poziomie zagnieżdżenia ma być wyświetlanie winksmiley.jpg

Mniemam, że na poziomie pętli foreach z listą książek, czyli jakoś 2-3 poziomy głębiej niż masz obecnie. Nie chce mi się tylko liczyć dokładnie ile klamerek wgłąb. Sam sobie sprawdź smile.gif
lordmonkey
ok dzięki już sobie dałem radę winksmiley.jpg

a jeszcze jedno : dlaczego sprawdzamy cały czas to :
  1. $ksiazki->nodeType == 1

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.