HiveBrain v1.2.0
Get Started
← Back to all entries
patternjavascriptMinor

Sencha touch with XML

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
withsenchaxmltouch

Problem

Could you please review the following? My concern is XML parsing is hardcoded:

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

  • You derive mediaContentURL through response.responseXML and title through xml, I would stick in both cases to xml



  • As you guessed, your approach to getting the mediaContentURL is pretty terrible.



  • Use getElementsByTagName and attributes, do not hardcode array indexes



  • Do not use console.log in 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.