Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [prototype] Parsowanie XML, Dość podstawowy problem z otrzymanymi AJAXowymi danymi
MarcinTryka
post 27.04.2008, 01:36:09
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 31.03.2007

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


Witam. Poprzez Ajax otrzymuje taki XML:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <users>
  3.  <user id="11">
  4.    <login>admin</login>
  5.  </user>  
  6.  <user id="23">
  7.    <login>testowe</login>
  8.  </user>
  9. </users>


Mój problem jest dość podstawowy, ale nie mogę znaleźć jakiegoś spójnego źródła informacji. Manual/Api Prototype jest dobry dla kogoś kto już się w tym w miarę swobodnie porusza i chce sobie przypomnieć nazwę metody. Tutoriale natomiast prezentują osobno pobieranie XMLa, osobno wstawianie danych z JSON na stronę, ja jednak nie mogę tego połączyć w całość.

Generalnie mam zmienną z XMLem (string).
chciałbym tą pobraną listę użytkowników wrzucić do HTML-owej listy:
  1. <ul id="users_list">
  2. </ul>

Nie mogłem znaleźć jakiegoś rozsądnego tutoriala pokazującego techniczne aspekty chodzenia po strukturze XMLa. Skorzystałem z czegoś co miało mi przerobić XML na jakąśtam strukturę (łatwą do porzejścia w przykładach):

var xotree = new XML.ObjTree();
var tree = xotree.parseXML( respXML );


Następnie robię coś takiego:

for(var lUser in tree.users.user){
$('users_list').insert(new Element("li", { id: "moo" }).update(lUser.login));
}

I guzik. lista na stronie powiększa się o kilkadziesiąt pustych <li id="moo"></li>, mimo iż XML zawiera tylko dwóch użytkowników.

Byłbym bardzo wdzięczny za jakiś przykład bądź link do takowego, wyjaśniający jak z tego XMLa mam wyciągać kolejne dane.

-- Edit --

A może olać sobie zabawę z XMLem i w php generować gotowy kod, i zamiast Ajax.Request uzyć Ajax.Update, który mi to bez problemu wrzuci w podane mu miejsce?

Ten post edytował MarcinTryka 27.04.2008, 01:38:52
Go to the top of the page
+Quote Post
paziek
post 23.07.2008, 15:33:09
Post #2





Grupa: Zarejestrowani
Postów: 207
Pomógł: 25
Dołączył: 16.11.2006

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


nie znam się na prototype, ale normalny XMLHttpRequest oferuje coś takiego jak responseXML, czyli XML string sparsowany na DOM.

No nic, mając XMLa w stringu, robisz tak:

  1. try {
  2.    parser=new DOMParser();
  3.    xmlDoc=parser.parseFromString(text,'text/xml');
  4. } catch(e) {
  5.    xmlDoc=new ActiveXObject('Microsoft.XMLDOM');
  6.    xmlDoc.async='false';
  7.    xmlDoc.loadXML(text);
  8. }

gdzie zmienna text to nasz XML w stringu, a xmlDoc to sparsowany XML string do DOM.

Teraz możesz użyć XPatha, albo DOMa do wyciągania wartości.

Podam rozwiażanie na przykładzie DOMa, bo akurat tutaj będzie prostsze.

  1. var root=xmlDoc.documentElement;
  2. if(root.hasChildNodes()) {
  3.    var el=xmlDoc.documentElement.childNodes,x=el.length,i;
  4.    for(i=0;x>i;i++) {
  5.       var li=document.createElement('li');
  6.       li.id=el[i].getAttribute('id');
  7.       li.appendChild(document.createTextNode(el[i].firstChild.firstChild.nodeValue));//zakłada, że jest jakaś wartość loginu, można dać w try{}catch(){} jeśli może nie być
  8.       $('users_list').appendChild(li);
  9.    }
  10. }


tylko uważaj na whitespace, najlepiej to wyświetlaj XML w jednej linijce
  1. <users><user id="11"><login>admin</login></user><user id="23"><login>testowe</login></user></users>

ewentualnie użyj wspomnianego XPath, tam akurat nie ma problemu z whitespace.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 16:07