2011-06-28 28 views
0

這給了我一個錯誤:使用Javascript從XML中檢索,出現錯誤?

<!-- 
To change this template, choose Tools | Templates 
and open the template in the editor. 
--> 
<!DOCTYPE html> 
<html> 
    <head> 
     <title></title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

     <script type="text/javascript"> 
      function loadXMLDoc(dname) 
      { 
       if (window.XMLHttpRequest) 
       { 
        xhttp=new XMLHttpRequest(); 
       } 
       else 
       { 
        xhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
       } 
       xhttp.open("GET",dname,false); 
       xhttp.send(); 
       return xhttp.responseXML; 
      } 

      var xmlDoc=loadXMLDoc("books.xml"); 

      var books = xmlDoc.getElementByTagName("title"); 

      for(var i = 0; i < books.length; i++){ 

       document.write(xmlDoc.getElementsByTagName("title")[i].childNodes[0].nodeValue + "<br />"); 
       document.write(xmlDoc.getElementsByTagName("author")[i].childNodes[0].nodeValue + "<br />"); 
       document.write(xmlDoc.getElementsByTagName("year")[i].childNodes[0].nodeValue + "<br />"); 

      } 
     </script> 

    </head> 
    <body> 
     <div>TODO write content</div> 
    </body> 
</html> 

但是如果我刪除行:var books = xmlDoc.getElementByTagName("title");並更換books.length'3'它的工作原理。

我的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> 

回答

3

也許這僅僅是因爲你在xmlDoc.getElementsByTagName冷落的 「S」( 「題」)?

+0

*哎呀* :)謝謝! – Jonathan

1

使用XPath表達而不是getElementsByTagName:

var x=loadXMLDoc("books.xml");
var xml=x.responseXML;
path="/bookstore/book/title";
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();
}

我有很難格式化代碼:(

+0

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 –

+0

這是一個建議。 –

+0

感謝您讓我回到我3歲以上的問題。看着我過去的代碼是如此的狡猾:) – Jonathan

相關問題