2013-04-06 75 views
1

的XML节点我从一个AJAX调用下面的XML:遍历使用JavaScript

<cars> 
<car id="Spyder"> 
<year>1946</year> 
<power>150bhp</power> 
<description>A classic car with smooth lines, rounded lights and recessed exhaust.</description> 
<image>1.jpg</image> 
</car> 
<car id="Solaris"> 
<year>1935</year> 
<power>145bhp</power> 
<description>A revisionist design, encompassing aggressive engine lines balanced with smooth curves.</description> 
<image>2.jpg</image> 
</car> 
<car id="Career"> 
<year>1932</year> 
<power>250bhp</power> 
<description>A triumph of engineering with independent suspension and brakes.</description> 
<image>3.jpg</image> 
</car> 
</cars> 

我试图获取所有有关汽车的信息。我试着访问firstChild.text等。这是我尝试过的最新代码,但我仍然收到一个异常,说Object #<Element> has no method 'getFirstChild',所以大概有getFirstChild函数的一些问题。

有人请指导我如何继续前进,遍历和获取数据?

这里是我的代码:

for (var i = 0; i < data.getElementsByTagName("car").length; i++) { 
    carname = data.getElementsByTagName("car")[i].getAttribute("id"); 
    year = data.getElementsByTagName("car")[i].getFirstChild().getTextContent(); 
    power = data.getElementsByTagName("car")[i].getSecondChild().getTextContent(); 
    description = data.getElementsByTagName("car")[i].getThirdChild().getTextContent(); 
    image = data.getElementsByTagName("car")[i].getFourthChild().getTextContent(); 
    alert(carname + year + power + description + image); 
} 

回答

3

由于某些原因上述所有的事情没有工作。下面的代码工作,但..

x=xmlDoc.documentElement; 
    y=xmlDoc.documentElement.childNodes; 
    var temp1,temp2; 
for (i=0;i<y.length;i++) 
    { 
    if (y[i].nodeType!=3) 
    {carname=y[i].getAttribute("id"); 

    for (z=0;z<y[i].childNodes.length;z++) 
     { 
     //alert(y[i].childNodes[z].nodeName); 
     if (y[i].childNodes[z].nodeType!=3 && y[i].childNodes[z].nodeName=="year") 
     { 
      year =y[i].childNodes[z].childNodes[0].nodeValue; 
     } 
     if (y[i].childNodes[z].nodeType!=3 && y[i].childNodes[z].nodeName=="power") 
     { 
      power =y[i].childNodes[z].childNodes[0].nodeValue; 
     } 
     if (y[i].childNodes[z].nodeType!=3 && y[i].childNodes[z].nodeName=="description") 
     { 
      description =y[i].childNodes[z].childNodes[0].nodeValue; 
     } 
     if (y[i].childNodes[z].nodeType!=3 && y[i].childNodes[z].nodeName=="image") 
     { 
      image =y[i].childNodes[z].childNodes[0].nodeValue; 
      alert(image); 
      image="data\\images\\"+image; 
     } 

     } 

希望这可以帮助别人.. :-)

-1

尝试

var cars = document.getElementsByTagName("car"); 
for (var i = 0; i < cars.length; i++) { 
    var car = cars[i]; 
    carname = car.getAttribute("id"); 
    year = getText(car, 'year'); 
    power = getText(car, 'power'); 
    description = getText(car, 'description'); 
    image = getText(car, 'image'); 
    console.log(carname + year + power + description + image); 
} 

function getText(car, tag){ 
    var els = car.getElementsByTagName(tag); 
    return els.length ? els[0].innerHTML : ''; 
} 
1

LIVE DEMO

var myXML = '<cars> \ 
<car id="Spyder"> \ 
    <year>1946</year> \ 
    <power>150bhp</power> \ 
    <description>A classic car with smooth lines, rounded lights and recessed exhaust.</description>\ 
    <image>1.jpg</image>\ 
</car>\ 
<car id="Solaris">\ 
    <year>1935</year>\ 
    <power>145bhp</power>\ 
    <description>A revisionist design, encompassing agressive engine lines balanced with smooth curves.</description>\ 
    <image>2.jpg</image>\ 
</car>\ 
<car id="Career">\ 
    <year>1932</year>\ 
    <power>250bhp</power>\ 
    <description>A triumph of engineering with independant suspension and brakes.</description>\ 
    <image>3.jpg</image>\ 
</car>\ 
</cars>'; 


var xmlDoc = $.parseXML(myXML), 
    xml = $(xmlDoc), 
    cars = xml.find("cars"); 

$.each(cars.find('car'), function(i, el){ 
    var car = $(el), 
     id = car.attr('id'), 
     year = car.find('year').text(), 
     power = car.find('power').text(), 
     description = car.find('description').text(), 
     image = car.find('image').text() ; 
    alert(id+' '+year+' '+power+' '+description+' '+image); 
}); 
1

在JavaScript中你没有getFirstChild,这看起来像Java的DOM API 。你有一个名为firstChild的房产。

我会尝试这样的:

var slice = Function.call.bind(Array.prototype.slice); 

var cars = slice(data.getElementsByTagName("car")).reduce(function(cars, node) { 
    cars.push(["year", "power", "description", "image"].reduce(function(car, tag) { 
     car[tag] = node.getElementsByTagName(tag)[0].textContent; 

     return car; 
    }, {id: node.getAttribute("id") })); 

    return cars; 
}, []); 

console.log(cars);