Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как получить список attributes ноды XML (https://javascript.ru/forum/events/45454-kak-poluchit-spisok-attributes-nody-xml.html)

andypop 01.03.2014 13:46

Как получить список attributes ноды XML
 
for (var v in x.attributes) {
            
                if (!isNaN(v)) {s += _fTag(_c.tgt, " "+x.attributes[v].name)+_tf+"=""+_fTag(_c.att, x.attributes[v].value)+_tf+""";
                }
            }

Такой код работает только в хроме и ff

danik.js 01.03.2014 15:26

name/value - это DOM Level 4 свойства. Используй nodeName/nodeValue - они из DOM3

И вобще ты неправильно итерируешься по атрибутам. Там помимо индексов и ключей атрибутов перечисляется куча мусора ввиде имен методов.
Итерируйся как все адекватные люди:

for (var i = 0; i < x.attributes.length; i++) {}

andypop 01.03.2014 15:53

Да спасибо. Но перед этим еще надо if (x.attributes){ поставить
Кстати
<?xml version="1.0" encoding="UTF-8"?>
как получить?

danik.js 01.03.2014 16:15

Цитата:

Сообщение от andypop
Но перед этим еще надо if (x.attributes){ поставить

Нафига?
Цитата:

Сообщение от andypop
как получить?

Нафига?

andypop 02.03.2014 00:23

если x.attributes undefined, то x.attributes.length выдаст ошибку в цикле

danik.js 02.03.2014 02:21

Цитата:

Сообщение от andypop
если x.attributes undefined

С чего бы им быть undefined?
alert(document.createElement('x').attributes)

alert(document.createElement('x').attributes.length)

andypop 02.03.2014 08:53

Я над этим сам думаю не один день:)

danik.js 02.03.2014 08:56

Цитата:

Сообщение от andypop
Я над этим сам думаю не один день

:blink:
А я вот за 10 секунд написал тест и проверил. Учись )

andypop 02.03.2014 09:50

Ок, всё дело в паразитной ноде "<#document>"
если написать x.firstChild, то парсер ее пропускает и x.attributes отрабатывает корректно.

andypop 02.03.2014 10:27

http://stackoverflow.com/questions/3...ith-javascript
А здесь показано как решить проблему кроссбраузерности.

danik.js 03.03.2014 01:52

Цитата:

Сообщение от andypop
А здесь показано как решить проблему кроссбраузерности.

Не вижу ничего про атрибуты. Мож ты ссылку перепутал?

andypop 03.03.2014 10:41

Изначально в моем вопросе было 2 вопроса про аттрибуты и про кроссбраузерность

document.implementation.createDocument(null, tagName, null) не проходит. Поиграйся в IE и Опере.
Правильный вариант
function createXmlDocument(string)
{
    var doc;
    if (window.DOMParser)
    {
        parser = new DOMParser();
        doc = parser.parseFromString(string, "application/xml");
    }
    else // Internet Explorer
    {
        doc = new ActiveXObject("Microsoft.XMLDOM");
        doc.async = "false";
        doc.loadXML(string); 
    }
    return doc;
}


Часовой пояс GMT +3, время: 16:39.