1

AJAX 呼び出しから次の XML を取得します。

<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);
}
4

4 に答える 4

4

何らかの理由で、上記のすべてが機能しませんでした。以下のコードはうまくいきました..

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; 
        }

      }

これが誰かに役立つことを願っています.. :-)

于 2013-04-07T06:14:28.490 に答える
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 );
});
于 2013-04-06T01:50:25.823 に答える
-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 : '';
}
于 2013-04-06T01:41:04.563 に答える