从XMLHttpRequest解析XML

问题描述:

我正在使用QML和XMLHttpRequest来获取一些XML数据。从XMLHttpRequest解析XML

var doc = new XMLHttpRequest(); 
    if (doc.readyState == XMLHttpRequest.DONE) { 
     var root = doc.responseXML.documentElement; 

     // Go through recenttracks children 
     var recentTracks = root.childNodes[1]; 
     for (var i=0; i < recentTracks.childNodes.length; ++i) 
     { 
      var child = recentTracks.childNodes[i]; 
      for (var j=0; j < child.childNodes.length; ++j) 
      { 
       if (child.childNodes[j].nodeName == "name") 
       { 
        console.log(child.childNodes[j].nodeValue); // [!] 
       } 
      } 
     } 
    } 

我正在解析,例如,这样的XML

<track> 
<artist mbid="293f35f8-3682-44bd-9471-13ca94fa9560">Tyler James</artist> 
<name>Tried To Measure</name> 
<streamable>0</streamable> 
<album mbid="">It Took The Fire</album> 
<url>http://www.last.fm/music/Tyler+James/_/Tried+To+Measure</url> 
<image size="small">http://userserve-ak.last.fm/serve/34s/59408859.jpg</image> 
</track> 

现在看代码[!]中的评论。在这一行之前,我正在检查当前节点名称是否是“名称”(查看XML)。现在我想要获得name的价值。我写道:child.childNodes[j].nodeValue,但它全部10次返回null(有10个孩子)。怎么了?

+0

这是哪一种语言? – 2011-03-23 23:37:48

DOM中元素节点的文本由子元素(文本节点)表示。文本节点的值是你想要的。

因此改变

child.childNodes[j].nodeValue 

child.childNodes[j].childNodes[0].nodeValue 

,使其工作。

http://www.w3schools.com/dom/dom_nodes_get.asp

也许还可以考虑使用XmlListModel。