6

Am cercando di leggere una risposta XML utilizzando getElementsByTagName:cross-browser 'getElementsByTagName' con spazio dei nomi da responseXML

var rows = items.responseXML.getElementsByTagName("z:row"); 

for (var i=0; i<rows.length; i++) 
{ 
//do something 
} 

Sopra codice funziona bene in Firefox e IE, ma in cromo getta nulla .. voglio dire lo fa non ottenere alcun dato .. quando i alert il rows.length mi dà 0 sempre in cromo.

Quindi ho cercato su google e ho capito che il problema è con xsd:element, quindi ho cambiato "z:row" a solo "row". Quindi ha funzionato in Chrome ma Firefox e IE hanno restituito 0 per rows.length.

Esiste un metodo su tutti i browser?

+0

Per rendere questa una domanda ancora migliore, potresti indicarci la (parte rilevante del) documento XML? – Bergi

+0

, vedi possibili duplicati [problema getElementsByTagName in chrome e safari] (http://stackoverflow.com/questions/2207941/getelementsbytagname-problem-in-chrome-and-safari) o [Parsing XML namespaces?] (Http: // stackoverflow .com/questions/1083565/parsing-xml-namespaces) per le soluzioni, sebbene non rispondano alla tua domanda esatta. – Bergi

risposta

2

Questo è quello che uso:

function byTagNS(xml,tag,ns) { 
    return xml.getElementsByTagNameNS 
     ? xml.getElementsByTagNameNS(ns,tag) 
     : xml.getElementsByTagName(ns+":"+tag); 
} 

Con nel tuo caso:

byTagNS(responseXML, "row", "z") 
+0

A cosa serve il backslash? – Bergi

+0

@Bergi niente! Corretto. – Christophe

0

Se non si preoccupano lo spazio dei nomi allora si potrebbe utilizzare il seguente:

xml.getElementsByTagNameNS("*", "yourElementHere") 

Questo recupera qualsiasi elemento con il nome desiderato indipendentemente da quale spazio dei nomi ha o se ha uno spazio dei nomi. Inoltre, questo dovrebbe funzionare come previsto su diversi browser.

See link for documentation.

Problemi correlati