如何使用jquery过滤xml数据?

时间:2012-10-20 09:30:04

标签: jquery xml xml-parsing xmlhttprequest

  <Item id="419" rank="0.0000" date_added="2012-09-24T19:43:14" date_end="2012-10-15T19:43:14" uid="134333" price="  ,-" district="-1" district_text="Friend" cid="9" cid_text="Underholdning" img_height_thumb="433" />
  <Item id="418" rank="0.0000" date_added="2012-09-24T19:17:42" date_end="2012-10-15T19:17:42" uid="134332" price="  ,-" district="-1" district_text="Friend" cid="9" cid_text="Underholdning" img_height_thumb="254" />
  <Item id="405" rank="102.0000" date_added="2012-09-23T18:55:20" date_end="2012-10-14T18:55:20" uid="134331" price="  102,-" district="-1" district_text="Friend" cid="761" cid_text="Mote" img_height_thumb="280" />

这是示例xml数据。我正在使用此代码获取xml。

 xmlDoc = xmlhttp.responseXML;
 var items = xmlDoc.getElementsByTagName("Item");

//想要添加代码

for (i = 0; i < items.length && i < 40; i++) {
var bRank = items[i].getAttribute("rank");
}

//想要添加代码

我想过滤大于0的所有数据排名。 我想只在这个地方添加过滤器,所以我的其余代码不会改变。 那么如何过滤项变量并获取其他变量中的过滤值。所以循环不受影响。 我可以在for循环中更改变量的名称。

请建议我这个想法。

首次修改

xmlDoc = xmlhttp.responseXML;
        var items1 = xmlDoc.getElementsByTagName("Item");

        var items = $(items1).filter('Item').each(function () {
            var bRank = $(this).attr('rank');
            var tempRank = bRank.replace("0000", "").replace(".", "");
            if (tempRank > 0)
                return this;
        });

alert(items.length);
        alert(items1.length);

警报的答案是3。

但是对于第一个警报1和第二个警报3,答案应该是这样的。

但是每个警报都得到相同的响应。 请检查并告诉我你的建议。 感谢

2 个答案:

答案 0 :(得分:1)

试试这个,

<强> Live Demo

var items = $('item').filter(function(){
  if(parseFloat($(this).attr('rank')) > 0)
      return this;
});

for (i = 0; i < items.length && i < 40; i++) {
   var bRank = items[i].getAttribute("rank");
}

您需要将xml添加到DOM以在xml上应用过滤器。之后你可以删除它。

<强> Live Demo

$('#div1').html(xmlDoc); 
var items = $('#div1 item').filter(function(){
  if(parseFloat($(this).attr('rank')) > 0)
      return this;
});
$('#div1').remove();

for (i = 0; i < items.length && i < 40; i++) {
   var bRank = items[i].getAttribute("rank");
}

答案 1 :(得分:0)

var filteredArray = [];

for (i = 0; i < items.length && i < 40; i++) {
  if(parseFloat(items[i].getAttribute("rank"), 10) > 0) {
    filteredArray.push(items[i]);
  }
}
然后

filteredArray将包含rank > 0的所有项目。