При использовании построения моего виджета Yahoo getElementsByTagName возвращает элементы, а не узлы
Я вижу, что itemNodes - это список узлов DOM, содержащий то же количество записей, что и количество заголовков. Я хочу получить доступ к информации внутри титульного узла. Я попытался использовать itemNodes.childNodes[0].nodeValue
Я получаю ошибку
Произошла ошибка: TypeError: itemNodes.childNodes не имеет свойств
размещение itemNodes.item(i) внутри цикла возвращает
Заголовок 1: [объект DOMElement] Заголовок 2: [объект DOMElement] Заголовок 3: [объект DOMElement] Заголовок 4: [объект DOMElement]
Я ожидал DOM-узлов. что я сделал не так? Я использую виджеты Yahoo 4.5 на Vista-машине? У меня есть следующее в моем файле.KON.
x = filesystem.readFile('sample.xml');
doc = XMLDOM.parse(x);
if(doc != null)
{
//print( doc.toXML() );
var itemNodes = doc.getElementsByTagName('title');
var firstItem = itemNodes.item(0);
print(itemNodes);
numberOfItems = itemNodes.length;
items=null;
items = new Array(numberOfItems);
for(var i = 0; i < numberOfItems; i++)
{
print("Title " + (i+1) + ": " + itemNodes );
}
}
else
{
print("An error occurred. Response status: (" + request.status + ") " + request.statusText);
}
}
catch(e)
{
print("An error occurred: " + e);
}
Пример. XML выглядит следующим образом
<!-- 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>
2 ответа
Механизм виджетов Yahoo работает по-разному, когда дело касается анализа XML. если вы используете
itemNodes.childNodes[0].nodeValue
чтобы получить доступ к значению первого дочернего узла, затем измените выражение на
itemNodes.childNodes.item(0).nodeValue
В общем, вы можете получить доступ к значению ih потомка, используя выражение ниже,
itemNodes.childNodes.item(i).nodeValue
Я получил доступ к содержимому XML, используя следующее. trimString - это пользовательская функция. Я думаю, что отладчик виджетов показал DomNodes как DomElements
for(var i = 0; i < numberOfItems; i++)
{
//get each item node
var node = itemNodes.item(i);
var titleList = node.evaluate( "title/text()" );
var titleString = trimString(String(titleList.item(0).nodeValue));
print("TitleX: " + titleString);
}