Проверьте, что у узла 'two' есть дочерний узел, прежде чем получить доступ к его данным.
childNodes.item (i) (или простую форму JavaScript childNodes [i]), как правило, следует избегать, так как он немного хрупок, полагаясь на то, что узлы пробельных символов находятся в точно ожидаемом месте.
Я бы сделал что-то вроде:
var tracks= xmlDoc.getElementsByTagName('track')[0];
var track= tracks.getElementsByTagName('one')[0];
var info= track.getElementsByTagName('two')[0];
var value= info.firstChild? info.firstChild.data : '';
(Если вы заранее не знаете тэги 'one' и 'two', вы всегда можете использовать 'getElementsByTagName (' * ')', чтобы получить все элементы, если вам не нужна поддержка IE5, где это не работает.)
Альтернативой последней строке является использование метода для чтения всего текста внутри узла, включая любой из его дочерних узлов. Это не имеет значения, если узел содержит только один текстовый узел, но может быть полезным, если дерево может быть денормализовано или содержит EntityReferences или вложенные элементы. Исторически сложилось так, что для получения этой информации нужно было написать метод recurse, но в настоящее время большинство браузеров поддерживают свойство textContent DOM уровня 3 и / или расширение innerText в IE:
var value= info.textContent!==undefined? info.textContent : info.innerText;