Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyciąganie danych za pomocą DOM z prostego pliku
Forum PHP.pl > Forum > XML, AJAX > XML
Civil
Witam, przejrzałem posty dotyczące pobierania danych z XML za pomocą DOM ale problem w tym, że nie wiem jak zacząć.

Mam prosty plik XML

  1.      <offers>
  2.      <offer>
  3. <id>1</id>
  4. <name>Pas</name>
  5.      <description>
  6. opis
  7.  
  8. </description>
  9. <url>mod=detail&id=1</url>
  10. <image>zolw_1.jpg</image>
  11. <price>189</price>
  12. <oldprice>199</oldprice>
  13. <category>s-akcesoria</category>
  14. <undercategory>ochraniacze</undercategory>
  15. <discount>n</discount>
  16. <table>n</table>
  17. </offer>
  18. itd
  19. </offers>


I jak teraz skonstruować pętlę, która pobierze kolejne dane z offer ?

Może pytanie banalne, ale nie umiem tego ugryźć, proszę o pomoc.
splatch
Może tak? smile.gif
  1. <?php
  2.  
  3. $dom = new DOMDocument();
  4. $dom->load('data.xml');
  5.  
  6. $list = $dom->getElementsByName('offer');
  7.  
  8. for ($i = 0; $i < $list->length; $i++) {
  9. $offer = $list->item($i);
  10. // dalej już z górki
  11. $offer->childNodes->item(0); // pierwsze dziecko offer
  12. }
  13.  
  14. ?>
Civil
wyskakuje ->


Warning: domdocument() expects at least 1 parameter, 0 given in /home/dealer/main/pkg/strona/web/html/scripts/XML/xml_read.php on line 3

Fatal error: Call to undefined method: domdocument->load() in /home/dealer/main/pkg/strona/web/html/scripts/XML/xml_read.php on line 4

Ja mam PHP 4.4.7
splatch
Ja mam PHP5 skorzystaj ze starszego rozszerzenia DOM XML
Civil
Oki - jest tam taki skrypcik:

  1. <?php
  2. $indent = "";
  3. $file = "semi.xml";
  4.  
  5. $showfile = file_get_contents("c:/Program Files/Apache Group/apache/htdocs/phpxml" . "/" . $file); // whatever path
  6.  // maybe the whole path is not important, look it up in other posts
  7.  
  8. $newstring=utf8_encode($showfile); // it's important!
  9. if(!$domDocument = domxml_open_mem($newstring)) {
  10.  echo "Couldn't load xml...";  
  11.  exit;
  12. }
  13.  
  14. $rootDomNode = $domDocument->document_element();
  15. print "<pre>";
  16. printElements($rootDomNode);
  17. print "</pre>";
  18.  
  19. function printElements($domNode)
  20. {
  21. if($domNode)
  22. {
  23. global $indent;
  24.  
  25. if($domNode->node_type() == XML_ELEMENT_NODE)
  26. {
  27. print "<br />".$indent."&lt;".$domNode->node_name();
  28. if($domNode->has_attributes())
  29. {
  30. $attributes = $domNode->attributes();
  31. foreach($attributes as $domAttribute)
  32. {
  33. print " $domAttribute->name=\"$domAttribute->value\"";
  34. }
  35. }
  36. print "&gt;";
  37. if($domNode->has_child_nodes())
  38. {
  39. $indent.=" ";
  40. $nextNode = $domNode->first_child();
  41. printElements($nextNode);
  42. $indent= substr($indent, 0, strlen($indent)-2);
  43. print "<br />".$indent."&lt;"."/".$domNode->node_name()."&gt;";
  44. }
  45. else
  46. {
  47. print "$domNode->node_value()&lt;/".$domNode->node_name()."&gt;";
  48. }  
  49. }
  50.  
  51. $nextNode = $domNode->next_sibling();
  52. printElements($nextNode);
  53. }
  54. }
  55. ?>


I w jaki sposób go przerobić do mojego zastosowania?
splatch
Jak go przerobić? Na pewno trzeba to zrobić dobrze. Pofatyguj się sam, zdobyte w ten sposób doświadczenie na pewno Ci się przyda. Nie oczekuj rozwiązań podawanych na tacy, ponieważ w ten sposób nigdy nie zostaniesz dobrym programistą.

Pozdrawiam i życzę więcej wytrwałości
Civil
Tak - tylko pierwszy raz się spotykam z tą biblioteką i programowaniem obiektowym w php - do tej pory radziłem sobie bez obiektów,

Stąd nie mam pojęcia jak to ugryźć a manual niestety jest bardzo rozbudowany.
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.