Reputation: 9240
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
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);
Upvotes: 2
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