6

Am пытается прочитать ответ XML с помощью getElementsByTagName:кросс-браузер «getElementsByTagName» с пространством имен из responseXML

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

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

Приведенный выше код отлично работает в Firefox и IE, но в хроме он бросает пустой .. я имею в виду, что делает не получить никаких данных .. когда i alertrows.length это дает мне 0 всегда в хроме.

Затем я искал в google и понимал, что проблема связана с xsd:element, затем я изменил "z:row" только "row". Затем он работал в Chrome, но Firefox и IE вернули 0 для rows.length.

Есть ли какой-либо метод, который во всех браузерах?

+0

Чтобы сделать этот вопрос еще лучше, не могли бы вы показать нам (соответствующую часть) вашего XML-документа? – Bergi

+0

см. Возможную дублируемую проблему [getElementsByTagName в хроме и сафари] (http://stackoverflow.com/questions/2207941/getelementsbytagname-problem-in-chrome-and-safari) или [Разбор пространств имен XML?] (Http: // stackoverflow .com/questions/1083565/parsing-xml-namespaces) для решений, хотя они не отвечают на ваш точный вопрос. – Bergi

ответ

2

Это то, что я использую:

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

С в вашем случае:

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

Для чего нужна обратная косая черта? – Bergi

+0

@Берги ничего! Исправленный. – Christophe

0

Если вы не заботитесь о пространстве имен, то вы можете использовать следующие:

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

Это приведет к выбору любого элемента с нужным именем независимо от того, какое пространство имен оно имеет или имеет какое-либо пространство имен вообще. Кроме того, это должно работать как ожидалось в разных браузерах.

See link for documentation.

 Смежные вопросы

  • Нет связанных вопросов^_^