Я знаю, что об этом много спрашивали, но я последовал совету и все еще получаю очень конкретное, на первый взгляд непоследовательное поведение моих файлов xml / jQuery: Прежде чем я перейду к вопросу, вот мой jQuery:
$(document).ready(function() {
var $body = $('body');
var currentXMLObjects;
var $currentXMLContainers = new Array();
var previousXMLObjects;
$body.append("<div id='content'><h3>Staff Organisational Chart</h1></div>");
// Load the xml file using ajax
$.ajax({
type: "GET",
url: "xml/content.xml",
dataType: "xml",
success: function (xml) {
$xml = $(xml);
console.log(xml.children[0]);
appendNewContainers(xml.children[0].children);
}
});
function appendNewContainers(children) {
currentXMLObjects = children;
console.log("currentXMLObjects.length = "+currentXMLObjects.length);
for (var x=0;x<currentXMLObjects.length;x++) {
$currentXMLContainers.push( $( currentXMLObjects[x] ) );
$("#content").append('<div class="container"><div>' + currentXMLObjects[x].childNodes[1].firstChild.nodeValue + '</div><div>' + currentXMLObjects[x].childNodes[1].firstChild.nodeValue + '</div><div>' + currentXMLObjects[x].childNodes[1].firstChild.nodeValue + '</div></div>');
}
}
});
А вот XML:
<content>
<level name="first name">
<title>Title 1 Here</title>
<firstName>First Name 1</firstName>
<lastName>Last Name 1</lastName>
<contact>Active</contact>
</level>
<level name="second name">
<title>Title 2 Here</title>
<firstName>First Name 2</firstName>
<lastName>Last Name 2</lastName>
<contact>Active</contact>
</level>
<level name="third name">
<title>Title 3 Here</title>
<firstName>First Name 3</firstName>
<lastName>Last Name 3</lastName>
<contact>Active</contact>
</level>
<level name="fourth name">
<title>Title 4 Here</title>
<firstName>First Name 4</firstName>
<lastName>Last Name 4</lastName>
<contact>Active</contact>
</level>
<level name="fifth name">
<title>Title 5 Here</title>
<firstName>First Name 5</firstName>
<lastName>Last Name 5</lastName>
<contact>Active</contact>
</level>
</content>
Теперь я ПЫТАЮСЬ получить текст из узлов title, firstName и lastName и добавить их в div к содержащему его div.
Мне потребовалось некоторое время, экспериментируя с различными вариантами расположения .childNodes [0], firstChild и nodeValue, чтобы понять, что я могу получить текст каждого «заголовка», используя индекс «1» в currentXMLObjects [x] .childNodes [1 ] ... Проблема в том, что я не могу получить доступ к узлам firstName и lastName. Я перепробовал все возможные аранжировки:
currentXMLObjects [x] .childNodes [1] .childNodes [1] .nodeValue выдает нулевую ошибку, как и: currentXMLObjects [x] .childNodes [0] .childNodes [1] .nodeValue
currentXMLObjects [x] .childNodes [1] .nodeValue возвращает и добавляет «ноль», и
currentXMLObjects [x] .childNodes [2] .nodeValue ничего не добавляет.
Точно так же любая комбинация, в которой отсутствует средний «childNodes [n]», возвращает либо null, либо вообще ничего.
Кто-нибудь знает, что здесь происходит? Я удивлен, что узел «title» так глубоко вложен в XML; nodeList, отправляемый в функцию appendNewContainers, уже детализируется. Но поиск дочерних узлов элемента «level» не работает на меньшей глубине.
Любая помощь, очень признательна. Ваше здоровье.