Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Importowanie z pliku XML
Forum PHP.pl > Forum > PHP
nexis
Aplikacja eksportuje drzewo kategorii o następującej strukturze:

  1. <?xml version="1.0" encoding="iso-8859-1"?>
  2. <zmiany>
  3.   <zmiana to="kategoria" typ="0" sub="1">
  4.      <pola>
  5.         <tx n="nazwa">Psy</tx>
  6.         <ref n="nadrzedna" to="</span>" />
  7.      <<span style='color:blue'>/pola>
  8.   </zmiana>
  9.   <zmiana to="kategoria" typ="0" sub="2">
  10.      <pola>
  11.         <tx n="nazwa">Jamniki</tx>
  12.         <ref n="nadrzedna" to="" sub="1" />
  13.      </pola>
  14.   </zmiana>
  15.   <zmiana to="kategoria" typ="0" sub="3">
  16.      <pola>
  17.         <tx n="nazwa">Długowłose</tx>
  18.         <ref n="nadrzedna" to="" sub="2" />
  19.      </pola>
  20.   </zmiana>
  21. </zmiany>


Co odpowiada następującej hierarchii:

  1. + Psy
  2. |--+ Jamniki
  3.    |-- Dlugowlose


Inaczej mówiąc sub to identyfikator kategorii, w znaczniku tx jest nazwa kategorii, a w znaczniku ref kategoria nadrzędna (rodzic).

Próbowałem tak:

  1. <?php
  2. $xml = file_get_contents('kategorie.xml');
  3. $domDocument = new DOMDocument;
  4. $domDocument->loadXML($xml);
  5. $domXPath = new DOMXPath($domDocument);
  6. foreach ($domXPath->query('//zmiana') as $keyDOM) {
  7.  $to = $keyDOM->hasAttribute('to')$keyDOM->getAttribute('to') : null;
  8.  $sub = $keyDOM->hasAttribute('sub') ? $keyDOM->getAttribute('sub') : null;
  9. }
  10. ?>


ale niestety wciąż nie mam dostępu do nazwy i kategorii nadrzędnej. Jakbyście to lepiej rozwiązali?
wrzasq
czy mozna zalozyc, ze kategoria podrzedna nigdy nie wystepuje przed swoja nadrzedna?

-edit-

jesli nie ma zadnych dodatkowych danych (czyli jezeli nie bedzie tam wiecej tagow, co spowoduje zamulenie skrpytu, ktory pisze) no to uzylbym czegos takiego (mniej wiecej):

  1. <?php
  2.  
  3. function getNodeTextContent(DOMNode $node)
  4. {
  5. foreach($node->childNodes as $child)
  6. {
  7. if($child->nodeType == XML_TEXT_NODE)
  8. {
  9. return $child->nodeValue;
  10. }
  11. }
  12.  
  13. return null;
  14. }
  15.  
  16. $xml = file_get_contents('kategorie.xml');
  17. $domDocument = new DOMDocument;
  18. $domDocument->loadXML($xml);
  19. $domXPath = new DOMXPath($domDocument);
  20. foreach ($domXPath->query('//zmiana') as $keyDOM) {
  21. $to = $keyDOM->hasAttribute('to')$keyDOM->getAttribute('to') : null;
  22. $sub = $keyDOM->hasAttribute('sub') ? $keyDOM->getAttribute('sub') : null;
  23.  
  24. foreach( $domXPath->query('pola/*', $keyDOM) as $field)
  25. {
  26. switch($keyDOM->nodeName)
  27. {
  28. case 'tx':
  29. $name = $field->hasAttribute('n') && $field->getAttribute('n') == 'nazwa' ? getNodeTextContent($field) : null;
  30. break;
  31.  
  32. case 'ref':
  33. $parent = $field->hasAttribute('n') && $field->getAttribute('n') == 'nadrzedna' ? $field->getAttribute('sub') : null;
  34. break;
  35. }
  36. }
  37. }
  38. ?>
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.