При использовании построения моего виджета Yahoo getElementsByTagName возвращает элементы, а не узлы - PullRequest
0 голосов
/ 10 ноября 2009

Я вижу, что itemNodes - это список узлов DOM, содержащий то же количество записей, что и количество заголовков. Я хочу получить доступ к информации внутри титульного узла. Я пытался использовать itemNodes.childNodes [0] .nodeValue

получаю ошибку

Произошла ошибка: Ошибка типа: 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);
}

Файл sample.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 ]

0 голосов
/ 02 сентября 2010

движок Yahoo Widget работает иначе, когда дело доходит до синтаксического анализа XML. если вы используете

itemNodes.childNodes[0].nodeValue

для доступа к значению первого дочернего узла, затем измените выражение на

itemNodes.childNodes.item(0).nodeValue

Как правило, вы можете получить доступ к значению i-го потомка, используя выражение ниже,

itemNodes.childNodes.item(i).nodeValue
0 голосов
/ 11 ноября 2009

Я получил доступ к содержимому 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);
    }
...