ChildNodes / NodeValue Путаница - PullRequest
2 голосов
/ 09 июля 2011

Я новичок в Ajax.

Я пытаюсь разобрать этот документ .

Я дошел до readystatechange, и он получает XML.Но я запутался, когда дело доходит до дочерних узлов и их значений.

Вот немного кода.Если я попытаюсь предупредить это первое значение, оно будет пустым.

var clientList = request.responseXML.getElementsByTagName('client');
for (var i=0;i<clientList.length;i++) {
    var client=clientList[i];
    var clientName = client.childNodes[0].nodeValue;
    alert(clientName)

Насколько я понимаю, на основе XML-документа каждый тег "client" будет иметь следующие дочерние узлы:

[0] : clientName, 
[1] : clientStreetAddress, 
[2] : clientCity
[n] : ...and so on... 

Так чего мне здесь не хватает?Понятно, что мои факты не ясны.Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 10 июля 2011

Спасибо TeslaNick за предложение использовать XPATH. Ответ был следующим:

var clientDoc = request.responseXML;
var clientName = clientDoc.evaluate("data/client[1]/clientName", clientDoc, null, XPathResult.STRING_TYPE, null).stringValue

Конечно, я думаю, что это должно быть изменено для работы с браузерами IE, и должен быть задан путь для прохождения по клиентам. Тем не менее, фактический, самый простой ответ выше.

Спасибо также Guffa за помощь!

0 голосов
/ 09 июля 2011

Вы должны читать данные из XML, используя имена тегов, не основываясь на том, в каком порядке они находятся. Когда документ анализируется, он может содержать текстовые узлы для пробела между элементами, что сместит индексы элементов, содержащих требуемые данные.

var clientName = client.childNodes.selectSingleNode('./clientName').nodeValue;
...