[ varelg @ 07.01.2006. 22:18 ] @
Zdravo,
Moja skripta bi trebalo od importovanog XML dokumenta prikazati imena XML chvorova.
Pokushavam NodeList kolekciju tretirati kao Array() ali kadgod pozovem NodeList.length, ne dobijam nishta. Gde greshim?
Kako izvuchi sve XML chvorove iz datog XML dokumenta, trenutno je skripta u JavaScript. Sve radi dokle znash imena chvorova ili "kopash" kroz DOM s firstChild, prevousChild itd., ali ne i s petljom...
[ noviKorisnik @ 07.01.2006. 23:28 ] @
Pozdrav,
Za početak, http://developer.mozilla.org/en/docs/Gecko_DOM_Reference

firstChild da, ali nema previousChild već previosSibling i nextSibling

provera da li je čvor baš element - nodeType == 1

i naravno, ime elementa - nodeName

može i petlja, ali trebala bi rekurzivno, obzirom na strukturu xml dokumenta, pre bih to odradio funkcijom ;-)
[ jablan @ 08.01.2006. 09:13 ] @
Citat:
noviKorisnik: ali trebala bi rekurzivno

Nema potrebe. DOM parser već ima logiku za pretraživanje nodova.

varelg, koristi selectNodes("*")

Pogledaj npr. primer sa
http://www.howtodothings.com/ViewArticle.aspx?article=92
[ noviKorisnik @ 08.01.2006. 09:36 ] @
(... sad ću malo da mrmljam... ok ako to treba da bude nešto kao microsoft only solution - inače selectNodes se ne nalazi u Gecko DOM interfejsima ... zato gledam neki presek slobodan za više browsera (fina deformacija, jeste da cela priča ne mora da se vrti samo u svetu browsera, navuče me ovo o javascriptu ... mada i njega danas ima prilično svugde :-)
[ utvara @ 08.01.2006. 20:15 ] @
>
A ako vas ne zanima M$ :)), onda pogledajte e4x, zanimljiva nadogradnja
JS-a.

poz. utvara
[ varelg @ 09.01.2006. 03:56 ] @
Kad se vech spomenu DOM interfejs (selectNodes), do nekog stepena se i mozhe iterirati kroz DOM strukturu recimo s childNodes (documentElement.childNodes vracha decu- chvorove od root-a)... ali to je sve shto se tiche dubine inspekcije, do prvog kolena, dublje bi se (recimo) stiglo s if testom sa hasChildNodes() (vracha true ako testirani chvor ima decu)...
Isto se spomenu Microsoft- only solution; sam motiv za ispitivanje DOM-a je nalazak reshenja koje bi radilo na bilo kojoj platformi, ne samo na Microsoftovoj...
[ jablan @ 09.01.2006. 08:05 ] @
Izvini, nisam znao da selectNodes ne radi u Gecku.

Pretpostavljam da su ljudi smislili neki workaround za taj problem, *ebeš DOM bez selectNodes..

Evo deo FckEditora, izgleda da se upravo time bavi:
Code:

  FCKXml.prototype.SelectNodes = function( xpath )
  {
     if ( document.all )        // IE
         return this.DOMDocument.selectNodes( xpath ) ;
     else                    // Gecko
     {
         var aNodeArray = new Array();
  
         var xPathResult = this.DOMDocument.evaluate( xpath, this.DOMDocument, 
                 this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ;
         if ( xPathResult ) 
         {
             var oNode = xPathResult.iterateNext() ;
              while( oNode )
              {
                  aNodeArray[aNodeArray.length] = oNode ;
                  oNode = xPathResult.iterateNext();
              }
         } 
         return aNodeArray ;
     }
  }