login  Naam:   Wachtwoord: 
Registreer je!
 Forum

'Dieper' niveau XML uitlezen

Offline Ijspegel - 06/06/2009 00:31 (laatste wijziging 06/06/2009 00:33)
Avatar van IjspegelNieuw lid Ik heb het volgende stukje xml:
  1. <products>
  2. - <product>
  3. <productID>63955ad0a9801f8be5bcbfabf3f8ac2016b7dd61</productID>
  4. <name>Best Western New York</name>
  5. <price currency="EUR">366.00</price>
  6. <productURL>http://www.bex.nl/asp/tradetracker/....</productURL>
  7. <imageURL>http://217.114.103.234/webbeelden/Grote%20web%20beelden/700000/38000/738469-internet2.jpg</imageURL>
  8. - <description>
  9. - <![CDATA[ centraal gelegen hotel op ca. 5 min. loopafstand van het station en op ca. 10 min. loopafstand van de Promenade des Anglais.
  10. ]]>
  11. </description>
  12. <categories />
  13. - <additional>
  14. <field name="geldig van">06/06/09</field>
  15. <field name="geldig tot">31/10/09</field>
  16. <field name="luchtvaartmaatschappij">KL|KLM</field>
  17. <field name="verzorging">|LO|Logies ontbijt</field>
  18. <field name="vervoer">Vliegtuig</field>
  19. <field name="vertrek_luchthaven">AMSTERDAM</field>
  20. <field name="werelddeel">Europa</field>
  21. <field name="land">FRANKRIJK</field>
  22. <field name="streek">,Alpes-Maritimes,CÃ&#180;te d'Azur,Cote d'Azur</field>
  23. <field name="plaats">Nice</field>
  24. <field name="sterren">2</field>
  25. <field name="accommodatie">Hotel</field>
  26. <field name="seizoen">Z</field>
  27. </additional>
  28. </product>
  29. - <product>
  30. <productID>ae824cbf5e53cda4eeeb8fc0b23a8f83dfb400e8</productID>
  31. <name>Nautica</name>
  32. <price currency="EUR">408.00</price>
  33. <productURL>http://www.bex.nl/asp/tradetracker/....</productURL>
  34. <imageURL>http://217.114.103.234/webbeelden/Grote%20web%20beelden/1000000/21000/1021740-internet2.jpg</imageURL>
  35. - <description>
  36. - <![CDATA[ prima hotel, goed gelegen vlakbij Vieux Nice. In het hotel vindt u allerlei nautische kenmerken terug!
  37. ]]>
  38. </description>
  39. <categories />
  40. - <additional>
  41. <field name="geldig van">12/06/09</field>
  42. <field name="geldig tot">31/10/09</field>
  43. <field name="luchtvaartmaatschappij">KL|KLM</field>
  44. <field name="verzorging">|LO|Logies ontbijt</field>
  45. <field name="vervoer">Vliegtuig</field>
  46. <field name="vertrek_luchthaven">AMSTERDAM</field>
  47. <field name="werelddeel">Europa</field>
  48. <field name="land">FRANKRIJK</field>
  49. <field name="streek">,Alpes-Maritimes,CÃ&#180;te d'Azur,Cote d'Azur</field>
  50. <field name="plaats">Nice</field>
  51. <field name="sterren">3</field>
  52. <field name="accommodatie">Hotel</field>
  53. <field name="seizoen">Z</field>
  54. </additional>
  55. </product>
  56. <products>


Nu lees ik de naam uit met de volgende code:
  1. foreach($xml->product as $product)
  2. {
  3. echo $product->name. '<br />';
  4. }


Dit gaat gewoon naar wens. Ik wil echter ook de waarde uit <field name="accommodatie"> tonen, maar weet niet goed hoe dat moet. Met de volgende code krijg ik het wel voor elkaar, maar volgens mij is het niet de beste manier.
  1. foreach($xml->product as $product)
  2. {
  3. foreach($product->additional as $veld)
  4. {
  5. echo 'Naam accommodatie: ' .$veld->field[11]. ' ' .$product->name. '<br />';
  6. }
  7. }

Zou iemand mij misschien kunnen vertellen of dit de beste manier hiervoor is? Moet het bijvoorbeeld ook echt met field[11] en kan het niet met field['accommodatie']Mocht het betere kunnen/moeten, dan hoor ik dat natuurlijk graag. 

5 antwoorden

Gesponsorde links
Offline Koen - 06/06/2009 00:38
Avatar van Koen PHP expert PHP.net: simplexml
Offline Ijspegel - 06/06/2009 07:48
Avatar van Ijspegel Nieuw lid Dat gebruik ik ook om dat xml bestand mee te openen. Ik weet dus alleen niet goed hoe ik dan zo'n genest item waar ook nog eens een name instaat het best kan uitlezen. Snap je? 
Offline Wave6 - 06/06/2009 09:03 (laatste wijziging 06/06/2009 19:33)
Avatar van Wave6 PHP beginner
  1. <?php
  2. $aArray = array();
  3. $i = 0; $j = 0;
  4. while(isset($xml->products[$i])) {
  5. while(isset($xml->products[$i]['additional'][$j])) {
  6. $aArray[] = $xml->products[$i]['additional'][$j];
  7. $j++;
  8. }
  9. $i++;
  10. }
  11. print_r($aArray);
  12. ?>
Offline Ijspegel - 06/06/2009 10:16 (laatste wijziging 06/06/2009 10:18)
Avatar van Ijspegel Nieuw lid Bedankt voor je reactie, maar het werkt helaas niet. Code:
  1. foreach($xml->product as $product)
  2. {
  3. $i = 0;
  4. $j = 0;
  5. while(isset($xml->products[$i]))
  6. {
  7. while(isset($xml->products[$i]['additional'][$j]))
  8. {
  9. $aArray = $xml->products[$i]['additional'][$j];
  10. $j++;
  11. }
  12. $i++;
  13. }
  14. print_r($aArray);
  15. }

Ik krijg dan de melding "Undefined variable: aArray"

Zoals ik al eerder zei heb ik het wel gewoon werkend, maar moet het volgens mij 'makkelijker' kunnen. Mijn werkende code is dus:
  1. foreach($xml->product as $product)
  2. {
  3. foreach($product->additional as $veld)
  4. {
  5. echo 'Naam accommodatie: ' .$veld->field[11]. ' ' .$product->name. '<br />';
  6. }
  7. }

Nu heb ik hierover de volgende vragen:
1. Kan ik niet iets doen als $veld->field['accommodatie'] in plaats van $veld->field[11]? Dit vind ik wat duidelijker namelijk.

2. Doe ik de foreach (foreach($product->additional as $veld)) wel goed? Is het de juiste wijze of kan het beter anders?

3. Heb ik die tweede foreach uberhaubt wel nodig? Het enige wat ik nog moet hebben uit die feed is de informatie uit
<field name="accommodatie">Hotel</field>.
Offline Wave6 - 06/06/2009 19:32 (laatste wijziging 06/06/2009 19:34)
Avatar van Wave6 PHP beginner
  1. <?php
  2. $aArray = array();
  3. $i = 0; $j = 0;
  4. while(isset($xml->products[$i])) {
  5. while(isset($xml->products[$i]['additional'][$j])) {
  6. $aArray[] = $xml->products[$i]['additional'][$j];
  7. $j++;
  8. }
  9. $i++;
  10. }
  11. print_r($aArray);
  12. ?>


Dit zou nu wel moeten werken.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.238s