2014-03-13 39 views
0

我有一個XML消息基於W3Schools的教訓:如何計算使用XPath在XML中的元素?

<?xml version="1.0" encoding="UTF-8""?> 

<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"> 
    <title lang="en">Learning XML</title> 
    <author>Erik T. Ray</author> 
    <year>2003</year> 
    <price>39.95</price> 
</book> 

</bookstore> 

而且我有這樣的XPath腳本:

<!DOCTYPE html> 
<html> 
<body> 
<script> 

function loadXMLDoc(dname) 
{ 
xhttp=new XMLHttpRequest(); 
xhttp.open("GET",dname,false); 
xhttp.send(""); 
return xhttp; 
} 

var x=loadXMLDoc("books.xml"); 
var xml=x.responseXML; 
path="/bookstore/book/price"; 

{ 
var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null); 
var result=nodes.iterateNext(); 

while (result) 
    { 
    document.write(result.childNodes[0].nodeValue); 
    document.write("<br>"); 
    result=nodes.iterateNext(); 
    } 
} 

</script> 
</body> 
</html> 

截至目前,該代碼正確顯示的價格列表,這正是我希望有。但是接下來我想在最後顯示找到的實例的數量;在出情況下,應該只返回4. 我嘗試添加:

document.write("<br>"); 
document.write(count(//price)); 

,但它不工作,我不知道我走到哪裏錯了。感謝您的幫助。

+0

兩件事情,請嘗試使用nodes.length。而且儘量不要使用W3Schools的參考,這是不可靠的 – PlaceUserNameHere

+0

我的壞的第一個點,使用次數(//書/價格),但第二點是有效的。不要使用W3Schools的 – PlaceUserNameHere

+0

對不起,我嘗試這樣做,這是行不通的,輸出的是空白的,所以必須有一個錯誤。如果我把這個變成一個變種,並宣佈它,然後我得到一個輸出,但它說未定義 – Ariestar

回答

0
while (result) 
{ 
    document.write(result.childNodes[0].nodeValue); 
    document.write("<br>"); 
    result=nodes.iterateNext(); 
} 
document.write(nodes.length); 
+0

對不起,我試過這個,它不起作用,輸出是空白的,所以一定有錯誤。如果我把它放入一個var並聲明它,然後我得到一個輸出,但它說未定義 – Ariestar