Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [advAJAX][XML] Problem z parsowaniem XML
Martio
post
Post #1





Grupa: Zablokowani
Postów: 167
Pomógł: 2
Dołączył: 15.02.2004

Ostrzeżenie: (30%)
XX---


Czy moglibyście zerknąć dlaczego funkcja xml2array napisana w JavaScript nie działa pod Internet Explorer i Operę? Działa tylko pod Fire Foxem. Jest ona odpowiedzialna za proste sparsowanie XML-a, który trafia do funkcji biblioteki advAjax.

Kod
function godzina() {
  advAJAX.get({
    url: 'ajax.php',
    onSuccess: function(obj) {
      var result = xml2array(obj.responseXML);
      
      document.getElementById('godzina').innerHTML = result["godzina"];
      window.setTimeout('godzina()', 1000);
    },
  });
}

function xml2array(xml) {
  var result = new Array();
  var key = null;
  var value = null;
  
  for (var i = 0; i < xml.childNodes.length; i++) {
    key = xml.getElementsByTagName("name")[i].getAttribute("id");
    value = xml.getElementsByTagName("name")[0].firstChild.nodeValue;
    result[key] = value;
  }
  
  return result;
}

godzina();


Dane w formacie XML:
Kod
<data>
    <name id="godzina">17:00</name>
</data>


Proszę o pomoc i rozwiązanie problemu z funkcją xml2array.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
revyag
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Jeśli plik xml masz postaci:
  1. <?xml version="1.0" encoding="ISO-8859-2"?>
  2. <data>
  3.    <name id="godzina">17:00</name>
  4. </data>

to Twoja pętla jest źle skonstruowana. Przejdzie po childNodes głównego korzenia DOM czyli po elementach <data>. Tych możesz mieć tylko jeden, bo jest to element najwyższego poziomu, więc pętla przejdzie raz, wtedy wyszukasz element name, o indeksie "i" - który jest indeksem <data> w ....childNodes głównego korzenia. I dlatego po części to działa (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)

Powinieneś to rozwiązać tak:
Kod
var start = xml.getElementsByTagName("data")[0];
for (var i = 0; i < start.childNodes.length; i++) {
    if(start.childNodes[i].nodeName=="name") {
        key = start.childNodes[i].getAttribute("id");
        value = start.childNodes[i].firstChild.nodeValue;
        result[key] = value;
    }
}


------

Cytat
Pierwsza rzecz, którą widzę - nie ważne ile elementów 'data' obok siebie będziesz miał w XML'u w IE pętla for przejdzie tylko raz

Chodzi o to że ważne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Elementów najwyższego poziomu może być cała jedna sztuka (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Inaczej dokument nie będzie poprawny.
Go to the top of the page
+Quote Post

Posty w temacie


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: 9.10.2025 - 08:30