检索特定的XML节点jQuery

时间:2012-02-06 23:15:34

标签: jquery xml

在jQuery中处理XML相对较新。我试图根据其父元素中的属性从XML文件中检索特定节点。这是XML(简短版):

     <?xml version="1.0" encoding="UTF-8"?>
        <members>
           <member row="1">
              <firstName>John</firstName>
              <lastName>Smith</lastName>
              <status>Active</status>
              <title>Member</title>
              <memberSince>August, 2011</memberSince>
           </member>
          <member row="2">
              <firstName>Jane</firstName>
              <lastName>Smith</lastName>
              <status>Active</status>
              <title>Member</title>
              <memberSince>October, 2011</memberSince>
           </member>
     </members>

我理解如何在jQuery中使用$.get()检索XML的基础知识,但似乎无法弄清楚如何只检索member row="2"的详细信息。

非常感谢任何帮助。

更新

以下是我用于此简单测试的jQuery,警报返回为undefined

$(document).ready(function() {
    $.get(
        'member_xml.php', function($xml) {
            $xml = $($xml);
            row = 2;
            var test = $xml.find('member[row="' + row + '"]').attr('firstName');
            alert(test);
        },
        'xml'
    );
});

2 个答案:

答案 0 :(得分:2)

假设$xml是包装在jQuery对象中的XML:

$xml.find('member[row="2"]')

将选择您想要操作的行。

$xml.find('member[row="2"] firstName').text(); //returns Jane

Here就是这个工作的一个例子。 XML选择器与从DOM中选择元素的工作方式类似;你知道的大部分内容都可以在这里应用。

答案 1 :(得分:2)

使用$.parseXML

解析xml
var xml = '<members>\
           <member row="1">\
              <firstName>John</firstName>\
              <lastName>Smith</lastName>\
              <status>Active</status>\
              <title>Member</title>\
              <memberSince>August, 2011</memberSince>\
           </member>\
          <member row="2">\
              <firstName>Jane</firstName>\
              <lastName>Smith</lastName>\
              <status>Active</status>\
              <title>Member</title>\
              <memberSince>October, 2011</memberSince>\
           </member>\
     </members>';


    xmlDoc = $.parseXML( xml );
    $xml = $( xmlDoc );
    $member = $xml.find('member[row="2"]').find('firstName').text();
console.log($member);

DEMO