Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML+PHP] Wyciągnięcie danych
Forum PHP.pl > Forum > XML, AJAX > XML
przemek_el
Witam.

z pliku o strukturze:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <katalog data="2009-08-10 10:00">
  3. <GrupyTowarowe>
  4. <GrupaGlowna id="MAT" nazwa="_Materiały reklamowe">
  5. <PodGrupy>
  6. <PodGrupa id="MAT-REK" nazwa="Materiały reklamowe" />
  7. </PodGrupy>
  8. </GrupaGlowna>
  9. <GrupaGlowna id="AGD" nazwa="AGD - Produkty">
  10. <PodGrupy>
  11. <PodGrupa id="AGD-CHL" nazwa="Automaty do pieczenia chleba" />
  12. <PodGrupa id="AGD-POP" nazwa="Automaty do popcornu" />
  13. <PodGrupa id="AGD-LDW" nazwa="Chłodziarki do wina" />
  14. <PodGrupa id="AGD-LOZ" nazwa="Chłodziarko-zamrażarki do zabudowy (lodówki)" />
  15. </PodGrupy>
  16. </GrupaGlowna>
  17. <GrupaGlowna id="AKC" nazwa="Akcesoria komputerowe">
  18. <PodGrupy>
  19. <PodGrupa id="AKC-ADA" nazwa="Adaptery, przejściówki" />
  20. <PodGrupa id="AKC-ABK" nazwa="Akcesoria biurowo - komputerowe" />
  21. <PodGrupa id="AKC-USB" nazwa="Obudowy na HDD i ODD (USB,FireWire,eSATA…)" />
  22. </PodGrupy>
  23. </GrupaGlowna>
  24. </GrupyTowarowe>
  25. </katalog>


potrzebuję wyciągnąć dane tzn id grupy, nazwę grupy i id_podgrupy oraz nazwę podgrupy. Próbowałem przez SimpleXML kodem:

  1. $xml = simplexml_load_file('Plik.xml'); //Ładowanie pliku XML
  2.  
  3. $liczba_grup=count($xml->GrupyTowarowe->GrupaGlowna);
  4. echo "<Br>Liczba grup:$liczba_grup<br>";
  5. for( $z = 0; $z < $liczba_grup; $z++ )
  6. {
  7. $liczba_pod_grup=count($xml->GrupyTowarowe->GrupaGlowna[$z]);
  8. for( $y = 0; $y < $liczba_pod_grup; $y++ )
  9. {
  10. foreach($xml->GrupyTowarowe->GrupaGlowna[$z]->PodGrupy->PodGrupa[$y]->attributes() as $a => $b)
  11. {
  12. if ($a=='id'){$produkt_id=$b;}
  13. if ($a=='nazwa'){$nazwa=$b;}
  14. echo "$produkt_id;$nazwa<br>";
  15. }
  16.  
  17. }
  18. }

i wyświetlają mi się tylko pierwsze podkategorie. proszę o pomoc winksmiley.jpg
erix
Cytat
i wyświetlają mi się tylko pierwsze podkategorie

Tzn?
Ruda Grażyna
Myślę że to powinno pomóc DOMdocument
powodzonka rolleyes.gif
viking
Ściągnij sobie http://code.google.com/p/phpquery/ i nie męcz się z gołym DOM.
adrian.p
  1. <?php
  2.  
  3. $xml = simplexml_load_file('Plik.xml'); //Ładowanie pliku XML
  4.  
  5. $iCountMain = count($xml->GrupyTowarowe[1]);
  6.  
  7. foreach( $xml->GrupyTowarowe[0] as $k_m => $v_m ) {
  8. echo $v_m['nazwa'].'<br />';
  9.  
  10. foreach( $v_m->PodGrupy[0] as $k_i => $v_i ) {
  11. echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.$v_m['nazwa']. ' - ' .$v_i['nazwa'].'<br />';
  12. }
  13. }
  14. ?>


Cos takiego?
Pawel_W
  1. print_r($xml->GrupyTowarowe->GrupaGlowna->PodGrupy->PodGrupa);

tutaj masz wzór, wrzuć to do foreach i będziesz miał
gcdreak
Oto rozwiązanie:
  1. $dom = new DOMDocument();
  2. $dom->loadXML($str);
  3.  
  4. $katalog = $dom->documentElement;
  5.  
  6. $grGl = $katalog->getElementsByTagName('GrupaGlowna');
  7. $podgrupy = $dom->getElementsByTagName('PodGrupa');
  8.  
  9. foreach($grGl as $gG):
  10. echo $gG->getAttribute('id').' ----- '.$gG->getAttribute('nazwa') . '<br />';
  11. foreach($podgrupy as $podgrupa):
  12. echo str_repeat('&nbsp;',10).'|--->'.$podgrupa->getAttribute('id'). '-----' .$podgrupa->getAttribute('nazwa'). '<br />';
  13. endforeach;
  14. endforeach;
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.