2009-10-01 3 views
0

Вот books.xml, XML-что я пытаюсь пройти:XML разбор суб-родители корневого узла

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!-- Edited by XMLSpy® --> 
<bookstore> 
<book category="cooking"> 
<title lang="en">Everyday Italian</title> 
<author>Giada De Laurentiis</author> 
<year>2005</year> 
<price>30.00</price> 
</book> 
<book category="children"> 
<title lang="en">Harry Potter</title> 
<author>J K. Rowling</author> 
<year>2005</year> 
<price>29.99</price> 
</book> 
<book category="web"> 
<title lang="en">XQuery Kick Start</title> 
<author>James McGovern</author> 
<author>Per Bothner</author> 
<author>Kurt Cagle</author> 
<author>James Linn</author> 
<author>Vaidyanathan Nagarajan</author> 
<year>2003</year> 
<price>49.99</price> 
</book> 
<book category="web" cover="paperback"> 
<title lang="en">Learning XML</title> 
<author>Erik T. Ray</author> 
<year>2003</year> 
<price>39.95</price> 
</book> 
</bookstore> 

Я хочу пойти в каждую книгу и извлечь все данные своих детей, однако у меня возникают проблемы: он продолжает возвращать null вместо значений текстовых узлов. Вот мой код:

<html> 
<head> 
<script type="text/javascript" src="loadXML.js"> 
</script> 
</head> 
<body> 

<script type="text/javascript"> 
xmlDoc=loadXMLDoc("books.xml"); 
var x = xmlDoc.getElementsByTagName("book"); 
for(var i=0;i<x.length;i++) 
{ 
    var y = x[i].childNodes; 
    for(var j=0;j<y.length;j++) 
    { 
     document.write(y[j].nodeValue); 
     document.write("<br>"); 
    } 
    document.write("<br>"); 
} 
</script> 

</body> 
</html> 

ответ

1

Текстовые данные хранятся в текстовых узлах, а не в узлах элементов. Попробуйте что-то вроде этого:

if (y[j].firstChild != null) { 
    document.write(y[j].firstChild.nodeValue); 
} 

childNodes[0] получит первый дочерний узел каждого <title>, <author>, <year> и т.д., элемент, который в каждом конкретном случае будет представлять собой текстовый узел, содержащий текст элемента. Затем этот текстовый узел будет иметь полезный nodeValue.

if необходим для отсечения дочерних узлов ваших <book> элементов, которые не являются элементами. В нем есть скрытые текстовые узлы, содержащие пробелы и новые строки, которые нужно игнорировать.

+0

Ваше предложение, похоже, не работает; Теперь я ничего не вижу в окне браузера. – Fortisimo

Смежные вопросы