patternjavascriptMinor
Sencha touch with XML
Viewed 0 times
withsenchaxmltouch
Problem
Could you please review the following? My concern is XML parsing is hardcoded:
The actual feed
Ext.Ajax.request({
url: storageDataItem.contentlink,
success: function (response) {
var store;
try {
var parser = new DOMParser();
// TODO: remove extra lines or ignore on parsing. How? :)
var xml = parser.parseFromString(response.responseText, "text/xml");
var mediaContentURL = response.responseXML.childNodes[0].childNodes[0].childNodes[1].lastChild.attributes[0].nodeValue;
var title = xml.getElementsByTagName('title')[1].childNodes[0].nodeValue;
} catch (e) {
// ignore exception
}
console.log("storage: ")
}
});
this.fireEvent("playButtonTapped", storageDataItem);
this.fireEvent("playAudioFile", title, mediaContentURL);The actual feed
Solution
From looking a little into this
I would use something like this:
- You derive
mediaContentURLthroughresponse.responseXMLandtitlethroughxml, I would stick in both cases toxml
- As you guessed, your approach to getting the mediaContentURL is pretty terrible.
- Use
getElementsByTagNameandattributes, do not hardcode array indexes
- Do not use
console.login production code
I would use something like this:
function getItemTitle( xml , itemNumber )
{
//Skip the title number of the playlist
return xml.getElementsByTagName('title')[itemNumber+1].textContent
}
function getItemURL( xml , itemNumber )
{
return xml.getElementsByTagName('content')[itemNumber].attributes.getNamedItem('url').value;
}Code Snippets
function getItemTitle( xml , itemNumber )
{
//Skip the title number of the playlist
return xml.getElementsByTagName('title')[itemNumber+1].textContent
}
function getItemURL( xml , itemNumber )
{
return xml.getElementsByTagName('content')[itemNumber].attributes.getNamedItem('url').value;
}Context
StackExchange Code Review Q#25923, answer score: 2
Revisions (0)
No revisions yet.