Разбор XML из XMLHttpRequest - PullRequest
       41

Разбор XML из XMLHttpRequest

2 голосов
/ 23 марта 2011

Я использую QML и XMLHttpRequest для получения некоторых XML-данных.

  var doc = new XMLHttpRequest();
  if (doc.readyState == XMLHttpRequest.DONE) {
        var root = doc.responseXML.documentElement;

        // Go through recenttracks children
        var recentTracks = root.childNodes[1];
        for (var i=0; i < recentTracks.childNodes.length; ++i)
        {
            var child = recentTracks.childNodes[i];
            for (var j=0; j < child.childNodes.length; ++j)
            {
                if (child.childNodes[j].nodeName == "name")
                {
                    console.log(child.childNodes[j].nodeValue); // [!]
                }
            }
        }
    }

Я, например, разбираю такие XML .

<track>
<artist mbid="293f35f8-3682-44bd-9471-13ca94fa9560">Tyler James</artist>
<name>Tried To Measure</name>
<streamable>0</streamable>
<album mbid="">It Took The Fire</album>
<url>http://www.last.fm/music/Tyler+James/_/Tried+To+Measure</url>
<image size="small">http://userserve-ak.last.fm/serve/34s/59408859.jpg</image>
</track>

Теперь посмотрите на комментарий в коде [!].Перед этой строкой я проверяю, является ли текущее имя узла "name" (посмотрите на XML).Теперь я хочу получить name значение.Я написал: child.childNodes[j].nodeValue, но он возвращает ноль все 10 раз (есть 10 детей).Что не так?

1 Ответ

6 голосов
/ 24 марта 2011

Текст узла элемента в DOM представлен дочерним элементом (текстовым узлом).Значение текстового узла - это то, что вы хотите.

Поэтому измените

child.childNodes[j].nodeValue

на

child.childNodes[j].childNodes[0].nodeValue

, чтобы он работал.

См.http://www.w3schools.com/dom/dom_nodes_get.asp

Может также рассмотреть возможность использования XmlListModel.

...