ChildNodes/NodeValue Путаница
Я новичок в 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-документа каждый "клиентский" тег будет иметь следующие дочерние узлы:
[0] : clientName,
[1] : clientStreetAddress,
[2] : clientCity
[n] : ...and so on...
Так чего мне здесь не хватает? Понятно, что мои факты не ясны. Пожалуйста помоги!
2 ответа
Спасибо TeslaNick за предложение использовать XPATH. Ответ был следующим:
var clientDoc = request.responseXML;
var clientName = clientDoc.evaluate("data/client[1]/clientName", clientDoc, null, XPathResult.STRING_TYPE, null).stringValue
Конечно, я думаю, что это должно быть изменено для работы с браузерами IE, и должен быть установлен путь для циклического прохождения по клиентам. Тем не менее, фактический, самый простой ответ выше.
Спасибо также Guffa за помощь!
Вы должны читать данные из XML, используя имена тегов, не основываясь на том, в каком порядке они находятся. Когда документ анализируется, он может содержать текстовые узлы для пробела между элементами, что сместит индексы элементов, содержащих нужные вам данные.
var clientName = client.childNodes.selectSingleNode('./clientName').nodeValue;