NightMICU
NightMICU

Reputation: 9240

Retrieving a specific XML node, jQuery

Relatively new to dealing with XML in jQuery. I am trying to retrieve a specific node from an XML file based on an attribute in its parent element. Here is the XML (short version):

     <?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>

I understand the basics of how to retrieve XML using $.get() in jQuery but cannot seem to figure out how to retrieve just the details for, say, member row="2".

Any help would be greatly appreciated.

Update

Here is the jQuery I am using for this simple test, the alert returns as 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'
    );
});

Upvotes: 1

Views: 19776

Answers (2)

Rafay
Rafay

Reputation: 31043

parse the xml using $.parseXML

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

Upvotes: 2

Chad
Chad

Reputation: 19619

Assuming $xml is your XML wrapped in a jQuery object:

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

Will select the row you want to manipulate.

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

Here is an example of this working. XML selectors work similarly to selecting elements from you DOM; most of what you know about that can be applied here.

Upvotes: 2

Related Questions