Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Klasa] Generowanie XML'a z tablicy
webdice
post
Post #1


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
webdice
post
Post #3


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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?
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




ad2) jesli indexem tablicy jest liczba, znaczyc to bedzie ze rodzic ma byc powielany. Przeciez nikt nie daje jako znaczniki xml liczb.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.09.2025 - 08:55