Почему мой код XML терпит неудачу в getAttribute? - PullRequest
1 голос
/ 15 марта 2011

Кто-нибудь пролил свет на то, почему это не работает?!

Я занимаюсь этим уже несколько дней, признаюсь, что я новичок.

Я пробовал это как javascript в браузере с захваченным набором данных, и это было прекрасно.

Преобразовал его для работы в Appcelerator Titanium, и он просто вылетает, когда попадает в getAttribute, независимо от того, как я пытаюсь его отформатировать.

Кто-то сказал, что поступают данные, но, похоже, все в порядке, это должен быть я, это работает для тысяч других людей.

Кто-нибудь поможет мне выбраться из этой колеи и сказать, что я делаю не так?

var xhr = Titanium.Network.createHTTPClient();

xhr.onload = function()
{
var xmlDoc = this.responseXML.documentElement;
var xlinestatus=xmlDoc.getElementsByTagName('LineStatus');
var xline=xmlDoc.getElementsByTagName('Line');
var xstatus=xmlDoc.getElementsByTagName('Status');
var newname = '';

for (i=0;i<xlinestatus.length;i++)
{
Ti.API.info(i);
newname = xlinestatus.getElementsByTagName("Line ID")[0].getAttribute("Name");
// newname = xlinestatus[i].getAttribute('Name');
Ti.API.info(newname);
// Ti.API.info(': ' + '</b>');
// Ti.API.info(xstatus[i].getAttribute("Description"));
// Ti.API.info("<br />");
// Ti.API.info(xlinestatus[i].getAttribute("StatusDetails"));
// Ti.API.info("<br />");
// Ti.API.info("<br />");
}

};

// open the client

xhr.open('GET','http://cloud.tfl.gov.uk/TrackerNet/LineStatus');
// xhr.open('GET','demodata.xml');


// send the data
xhr.send();

Ответы [ 2 ]

1 голос
/ 15 марта 2011
var xhr = Titanium.Network.createHTTPClient();

xhr.onload = function() {
   var xmlDoc = Ti.XML.parseString(this.responseText).documentElement;
   var xlinestatus = xmlDoc.getElementsByTagName('LineStatus');

   for (i = 0; i < xlinestatus.length; i++) {
     var theItem = xlinestatus.item(i);
     var newname = theItem.getElementsByTagName("Line").item(0).getAttribute("Name");
     var desc = theItem.getElementsByTagName("Status").item(0).getAttribute("Description");
     var active = theItem.getElementsByTagName("Status").item(0).getAttribute("IsActive");
     Ti.API.info(" Line: " + newname + " Status: " + desc + ", Active: " + active);
   }

};

// open the client
xhr.open('GET', 'http://cloud.tfl.gov.uk/TrackerNet/LineStatus');

// send the data
xhr.send({});

предоставил этот вывод

[INFO] Line: Bakerloo Status: Good Service, Active: true
[INFO] Line: Central Status: Good Service, Active: true
[INFO] Line: Circle Status: Minor Delays, Active: true
[INFO] Line: District Status: Severe Delays, Active: true
[INFO] Line: Hammersmith and City Status: Minor Delays, Active: true
[INFO] Line: Jubilee Status: Good Service, Active: true
[INFO] Line: Metropolitan Status: Part Suspended, Active: true
[INFO] Line: Northern Status: Good Service, Active: true
[INFO] Line: Piccadilly Status: Minor Delays, Active: true
[INFO] Line: Victoria Status: Good Service, Active: true
[INFO] Line: Waterloo and City Status: Good Service, Active: true
1 голос
/ 15 марта 2011

В этой строке:

newname = xlinestatus.getElementsByTagName("Line ID")[0].getAttribute("Name");

В XML нет элемента с именем «Line ID».Это элемент с именем «Линия», который имеет атрибут «ID»:

<Line ID="1" Name="Bakerloo"/>
...