Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Błąd generowania XMLa
Forum PHP.pl > Forum > PHP
Mesukan
Witam potrzębuę pomocy przy funkcji, która konwertuje tablicę na XML. Pojawia się problem i nie mam pojkećia jak go rozwiązać.

Wyskakuje w firefox:

CODE
Błąd parsowania XML: deklaracja XML lub tekstu nie jest na początku jednostki
Obszar: http://localhost/sklep_grywus/catalog/categories
Numer linii: 3, kolumna 1:<?xml version="1.0" encoding="UTF-8"?><categories><node><id><![CDATA[2]]></id><name><![CDATA[Gry]]></name></node><node><id><![CDATA[3]]></id><name><![CDATA[Karty]]></name></node><node><id><![CDATA[4]]></id><name><![CDATA[Modele]]></name></node><node><id><![CDATA[1]]></id><name><![CDATA[Puzzle]]></name></node><node><id><![CDATA[5]]></id><name><![CDATA[Zabawki]]></name></node></categories>
^


Tutaj mam funkcje w modelu home
  1. function array2xml($array, $parent_node=null){
  2. if(is_array($array)==true){
  3.  
  4. $result .= $parent_node==null? '':'<'.$parent_node.'>';
  5. foreach($array as $key=>$value){
  6.  
  7. if(is_numeric($key)==true){
  8. $result .= '<node>';
  9. if(is_array($value)==true){
  10. $result .= $this->array2xml($value);
  11. }else{
  12. $result .= '<![CDATA['.$value.']]>';
  13. }
  14. $result .= '</node>';
  15. }else{
  16. $result .= '<'.$key.'>';
  17. if(is_array($value)==true){
  18. $result .= $this->array2xml($value);
  19. }else{
  20. $result .= '<![CDATA['.$value.']]>';
  21. }
  22. $result .= '</'.$key.'>';
  23. }
  24. }
  25. $result .= $parent_node==null? '':'</'.$parent_node.'>';
  26. return $result;
  27. }else{
  28. return false;
  29. }
  30. }


A funkcja wyświetlania w kontrolerze catalog wygląda tak:

  1. function categories($args=null,$post=null){
  2. header ("content-type: text/xml");
  3. echo '<?xml version="1.0" encoding="UTF-8"?>';
  4. echo $this->model->home->array2xml($this->model->catalog->get_all_categories(),'categories');
  5. }


Męczę się z tym już dwa dni i nie wiem w czym jest problem.
wdev
Gdzieś w reszcie skryptu Ci wyrzuca puste linie, problemem jest to, że <?xml ?> pojawia się dopiero w 3 linii, a powinno być w pierwszej... Spróbuj usunąć spację po header, może to ona Ci bruździ. Jak nie, to może jakieś include robisz? Jeśli include zamykasz znacznikiem ?> (co nie jest konieczne) i masz po nim enter, to Ci go wyrzuci do kodu. Ewentualnie profilaktycznie usuń wszystkie białe znaki aaevil.gif
Mesukan
Dokładnie. Chodziło o białe znaki. Po <?php ..... ?> miałem kilka spacji i tu tkwił problem. Dzięki
Crozin
XML nie generuje się poprzez ręczne łączenie tekstu. To najprostsza droga do błędów. Już na chwilę obecną Twój kod jest podatny na błędy (wystarczy, że w $value będzie "]]>" i XML się posypie).

Masz odpowiednie narzędzia do generowania XML-i, więc użyj ich: DOM.
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.