Ajax / jQuery:如何检查xml字符串是否包含特定值

时间:2014-08-24 07:17:51

标签: jquery ajax xml find

我想使用Ajax检查XML字符串(" data")是否在" voteBy"下包含某个值,例如名称" John Doe"。 如果是,那么我想显示警报,如果没有则显示另一个警报。 背后的想法是我想稍后使用jQuery做一些事情,但前提是在xml字符串中找不到搜索词。

我尝试了下面的Ajax调用的成功函数来获取这个XML字符串。在这种情况下,它应该警告"发现"因为搜索词出现在XML字符串中,但我的方法并没有返回任何内容。

有人可以告诉我这里的错误吗? 注意:xml的数据可能会有所不同,因此某个项目可能会有更多或更少或没有投票。

我的XML如下所示(示例数据,缩短):

<ranks>
  <itemDetails>
    <itemID>1</itemID>
    <title>Test item</title>
    <details>&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit...&lt;/p&gt;</details>
    <lastUpdate>Added</lastUpdate>
    <modTime>Saturday, 23 August 2014</modTime>
    <modBy>Someone</modBy>
    <comments>
      <commentID>1</commentID>
      <comment>Some comment</comment>
    </comments>
    <comments>
      <commentID>2</commentID>
      <comment>Another comment</comment>
    </comments>
    <votes>
      <voteBy>John Doe</voteBy>
    </votes>
    <votes>
      <voteBy>Jane Doe</voteBy>
    </votes>
  </itemDetails>
</ranks>

我的jQuery(仅限成功函数,缩短) - 这里的数据是我的xml字符串:

$.ajax({
    // ...
    success:function(data) {    
        if(!$(data).find('voteBy').text() == 'John Doe') {
            alert('not found');
        } else {
            alert('found');
        }
    }
});

非常感谢你提供任何帮助,蒂姆。

1 个答案:

答案 0 :(得分:2)

一种方法是将.each元素用于xml节点:

var yourXML;     
function search_xml(string_for_search){
  $.ajax({
     type:"GET",
     url: "xml_file.xml",
     dataType: "xml",
     success: function(xml){

          $(xml).find('voteBy').each(function(){
          if($(this).text() == string_for_search) alert ('found :)');
          else alert ('not found ! :(');
          });

        }
  });
}

search_xml("John Does");

另一种方式:使用.filter.find

var yourXML;     
function search_xml(string_for_search){
  $.ajax({
     type:"GET",
     url: "xml_file.xml",
     dataType: "xml",
     success: function(xml){
              // Filter 
            myXML = $(xml).find("itemDetails").filter(function() {
                return $(this).find('voteBy').text() == string_for_search;
            });

             // Store a string with your keywords 
            var output = myXML.children().map(function() {
                return this.tagName + '=' + $(this).text();
            }).get().join(' ');

            alert(output);
        }
  });
}

search_xml("John Doe");