In my previous posts I did present a solution for selecting XML namespaces that was quite clunky. Thanks to Gianluca Troiani, I'm now aware of a simpler solution. This solution involves the use of a double backslash just before the ':' token of the XML suffix. Further, this is the standard procedure that jQuery uses to escape selectors inside an expression. So, given the following XML fragment:
<dvd xmlns:dvd="http://onwebdev.blogspot.com/ns/dvd">
<dvd:item>
<dvd:title>Mr. Jones</dvd:title>
<dvd:year>1993</dvd:year>
</dvd:item>
<dvd:item>
<dvd:title>Alien</dvd:title>
<dvd:year>1977</dvd:year>
</dvd:item>
<dvd:item>
<dvd:title>Dead Poets Society</dvd:title>
<dvd:year>1989</dvd:year>
</dvd:item>
</dvd>
we can write the following jQuery code:
$(document).ready(function() {
$('dvd').find('dvd\\:item').each(function() {
var $item = $(this);
var $title = $item.find('dvd\\:title').text();
var $year = $item.find('dvd\\:year').text();
alert('DVD title: ' + $title + '\n' + 'DVD year :' + $year);
});
});
That's a lot neater than using DOM properties (and more cross-browser).