2009-07-21 9 views
6

considerare questo problema:Contare il numero di nodi in un frammento di XML utilizzando Javascript/E4X

Utilizzando Javascript/E4X, in uno scenario di utilizzo non del browser (un motore di integrazione Javascript HL7), v'è una variabile in possesso di un Snippet XML che potrebbe avere più nodi ripetitivi.

<pets>  
<pet type="dog">Barney</pet> 
<pet type="cat">Socks</pet> 
</pets> 

Domanda: Come ottenere il conteggio del numero di nodi da compagnia in Javascript/E4X?

MODIFICA: per chiarire, questa domanda dovrebbe essere intorno a E4X (ECMAScript for XML). Scuse a coloro che hanno risposto senza questa informazione. Avrei dovuto cercare & postato queste informazioni in anticipo.

+0

Hai almeno accesso a un'API DOM? –

risposta

5

Utilizzare un oggetto XML E4X per creare un XMLList dei nodi "animali". È quindi possibile chiamare il metodo di lunghezza su XMLList.

//<pets> 
// <pet type="dog">Barney</pet> 
// <pet type="cat">Socks</pet> 
//</pets> 

// initialized to some XML resembling your example 
var petsXML = new XML(""); 

// build XMLList 
var petList = petsXML['pet']; 

// alternative syntax 
// var petList = petsXML.pet; 

// how many pet nodes are under a given pets node? 
var length = petList.length(); 
+0

Non puoi semplicemente fare: petsXML.pet.length(); –

+0

Assolutamente, e in effetti farei proprio questo! Volevo solo rompere le cose per chiarire che ritorni .pet (o ['pet']) e oggetto XMLList, e che length() è una chiamata di metodo su quel tipo. – csj

3

Direi ... utilizzare jQuery!

var count = 0; 
    $(xmlDoc).find("pet").each(function() { 
      count++; 

      // do stuff with attributes here if necessary. 
      // var pet = $(this); 
      // var myPetType = pet.attr("type"); 
     }; 
    }); 

EDIT:. Non è possibile utilizzare jQuery ... ok, facciamolo in javascript regolare :(

 var pets= xmlDoc.getElementsByTagName("pet"); 
     for (var i = 0; i < pets.length ; i++) 
     { 
      count++; 
     // var petObj = { 
     //  pets[i].getAttribute("type") 
     // }; 
     } 
+0

Bello. Tuttavia '$' non è pensato per stringhe arbitrarie di xml, è pensato per html. Funziona per caso in questo caso particolare. Garantito per funzionare è '$ (xmlDoc)' (cioè il documento DOM che rappresenta 'xmlstring'). –

+0

Ottima risposta! Sfortunatamente JQuery non è disponibile per me, poiché il JS non è in un browser o è in grado di fare riferimenti a librerie esterne. In ogni caso, questa risposta ottiene un risultato positivo! –

+0

100% corretto. find() funziona sugli elementi, non sul testo, che non è troppo chiaro dal nome della mia variabile. Credo che dovrei renderlo più chiaro .. buona chiamata. – womp

3

Usando il DOM è possibile chiamare getElementsByTagName()

alert(document.getElementsByTagName("pet").length); 

Altro informazioni:

https://developer.mozilla.org/en/DOM:element.getElementsByTagName

Hai bisogno di ottenere il documento XML in qualche modo. XHR, ad esempio, restituisce documenti come XML analizzato.

var xhr = new XMLHttpRequest(); 
xhr.open('GET', 'http://domain.com/pets.xml', true); 
xhr.onreadystatechange = function (e) { 
    if (xhr.readyState == 4 && xhr.status == 200) 
     alert(xhr.responseXML.getElementsByTagName("pet").length); 
}; 
xhr.send(null); 
+1

Hai salvato la mia ora, grazie +1 –

Problemi correlati