Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Klasa] Generowanie XML'a z tablicy
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
webdice
Witam, napisałem małą klasę do generowania plików XML z tablicy (jedno lub wielowymiarowej).

  1. <?php
  2.  
  3. class XMLCreate
  4. {
  5. private $DOMDocument;
  6. private $DOMElement;
  7.  
  8. public function __construct (array $array, $rootNode = 'root')
  9. {
  10. $this -> DOMDocument = new DOMDocument ('1.0', 'UTF-8');
  11.  
  12. $this -> createNode ($this -> DOMDocument -> appendChild ($this -> DOMDocument -> createElement ($rootNode)), $array);
  13. }
  14.  
  15. private function createNode (DOMElement $DOMElement, array $data)
  16. {
  17. foreach ($data as $key => $value)
  18. {
  19. $key = ltrim ($key, '01234567890');
  20.  
  21. if (is_array ($value))
  22. {
  23. $this -> createNode ($DOMElement -> appendChild ($this -> DOMDocument -> createElement ($key)), $value);
  24. }
  25. else if (substr ($key, 0, 1) == '@')
  26. {
  27. $DOMElement -> setAttribute (substr ($key, 1), $value);
  28. }
  29. else
  30. {
  31. $DOMElement -> appendChild ($this -> DOMDocument -> createElement ($key, $value));
  32. }
  33. }
  34. }
  35.  
  36. public function save ()
  37. {
  38. return $this -> DOMDocument -> saveXML ();
  39. }
  40. }
  41.  
  42. ?>


Sposób użycia:

  1. <?php
  2.  
  3. $array = array
  4. (
  5. '@time' => time (), // @ - oznacza że dany index będzie atrybutem elementu, a wartość index'u zostanie zmieniona na wartość atrybutu.
  6.  
  7. 'people' => array
  8. (
  9. 'name' => 'Jan',
  10. 'surname' => 'Kowalski',
  11.  
  12. 'address' => array
  13. (
  14. 'city'  => 'Tarnow',
  15. 'postalCode' => '33-100',
  16. ),
  17.  
  18. '0interests' => array // Jak wiadomo nazwa elementu nie może zaczynać się od cyfry. Początkowe cyfry zos
  19. an&#261; usunięte i zostanie stworzonych kilka elementów o tej samej nazwie.
  20. (
  21. 'name' => 'Informatyka',
  22. ),
  23.  
  24. '1interests' => array
  25. (
  26. 'name' => 'Sport',
  27. ),
  28. ),
  29. );
  30.  
  31. $XML = new XMLCreate ($array); // Jako drugi, nieobowiązkowy argument możemy podać nazwę głównego węzła.
  32.  
  33. print $XML -> save ();
  34.  
  35. ?>
nospor
Cytat
header ('Content-type: application/xml; charset="UTF-8"');

To ze ty akurat korzystasz z tej klasy tylko i wyłącznie by generowac xml do przeglądarki, to nie znaczy ze inni tak będą robic. W pliku z klasą tego header byc nie powinno

  1. <?php
  2. '0interests' => array // Jak wiadomo nazwa elementu nie może zaczynać się od cyfry. Początkowe cyfry zostaną usunięte i zostanie stworzonych kilka elementów o tej samej nazwie.
  3. (
  4. 'name' => 'Informatyka',
  5. ),
  6.  
  7. '1interests' => array
  8. (
  9. 'name' => 'Sport',
  10. ),
  11. ?>

No źle. To powinno wyglądac tak:
  1. <?php
  2. 'interests' => array(
  3. (
  4. 'name' => 'Informatyka',
  5. ),
  6.  
  7. (
  8. 'name' => 'Sport',
  9. )
  10. )
  11. ?>
Przeciez nie będą bawil się w jakąs numeracje elementow.

I nie jestem pewien czy do zwyklej generacji xmla trzeba zaprzęgać aż DOM. Wystarczy plucie tekstu. Ale z tym to się juz czepiam tylko dla zasady winksmiley.jpg
webdice
Ad 1. Racja, header dodałem tylko dla łatwiejszego pisania (już poprawiłem).

Ad 2. Co do wyglądu tablicy, zauważ że index'ami są liczby co jest niedopuszczalne. Oczywiście można próbować z wyciąganiem nazwy index'u "rodzica", ale co w wypadku gdy cała tablica będzie opierać się na index'ach liczbowych?
nospor
ad2) jesli indexem tablicy jest liczba, znaczyc to bedzie ze rodzic ma byc powielany. Przeciez nikt nie daje jako znaczniki xml liczb.
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.