2015-09-04 4 views
-1

Так что я пытаюсь получить данные из XML-файла, но когда я прохожу через него и хочу выйти из «countyname», я получаю только первый, а затем останавливается. Является ли XMl неправильным? потому что я пробовал с другим XML, и это отлично работает с моим кодом, который получает данные в моем табличном представлении. С уважением! FilipXML-данные показывают только некоторые из них

<?xml version="1.0" encoding="UTF-8"?> 
<food_company> 
<county> 
    <countyname>New York</countyname> 
    <city> 
    <cityname>New York City</cityname> 
     <restaurant> 
      <name>Dinos pizzeria</name> 
      <phone>01111111</phone> 
      <location>broadway1</location> 
     </restaurant> 
     <restaurant> 
      <name>Dinos pizzeria2</name> 
      <phone>01111111</phone> 
      <location>broadway2</location> 
     </restaurant> 
     <restaurant> 
      <name>Dinos pizzeria3</name> 
      <phone>01111111</phone> 
      <location>broadway3</location> 
     </restaurant> 
    </city> 
     <countyname>Baldwin County</countyname> 
    <city> 
    <cityname>Bay Minette</cityname> 
     <restaurant> 
      <name>Dinos pizzeria</name> 
      <phone>01111111</phone> 
      <location>broadway1</location> 
     </restaurant> 
     <restaurant> 
      <name>Dinos pizzeria2</name> 
      <phone>01111111</phone> 
      <location>broadway2</location> 
     </restaurant> 
     <restaurant> 
      <name>Dinos pizzeria3</name> 
      <phone>01111111</phone> 
      <location>broadway3</location> 
     </restaurant> 
    </city> 
</lan> 
</food_company> 

app.js Код:

Titanium.UI.setBackgroundColor('#E1E6EE'); 



// create base UI tab and root window 
var win1 = Titanium.UI.createWindow({ 


statusBarStyle: Ti.UI.iPhone.StatusBar.LIGHT_CONTENT, 
tintColor: '#FFF', 
backgroundColor:'#E1E6EE', 
url: 'lan.js', 
tabBarHidden: true, 
navBarHidden: true 
}); 

win1.open(); 

county.js Код:

Ti.include('app_functions.js'); 

var win = Titanium.UI.currentWindow; 

// create a table to display news feeds-------------------------------- 
var itemsTable = Ti.UI.createTableView({ 
top : '11%', 
left : 0, 
leftImage : 'taxi.png', 
backgroundColor : '#DCEEDC', //E1E6EE 
bottom : '0%', 
// search : searchBar, 
filterAttribute : 'searchFilter' 
}); 
win.add(itemsTable); 

// define xmlFeed (you can customize this with any RSS feed) 
var xmlFeed = 'http://eventverket.nu/test/test5.xml'; 
//'http://83.254.164.137:1000/test.xml'; 

// create a new HTTP client object 
var xhr = Ti.Network.createHTTPClient(); 

// this method will process the remote data 
xhr.onload = function() { 

// create an xml object 
var xml = this.responseXML; 

// create an array that will store news items for our tableView 
var data = []; 
var data = []; 
var items = xml.documentElement.getElementsByTagName("county"); 
for (var i=0; i<items.length; i++) { 
var row = Ti.UI.createTableViewRow({ 
    title: items.item(i).getTextContent() 
}); 
data.push(row); 
} 
itemsTable.data = data; 

// when the user clicks on a row 
itemsTable.addEventListener('click', function(e) { 

// NEW WINDOW 
var newWindow = Titanium.UI.createWindow({ 
    backgroundColor : '#DCEEDC', //E1E6EE 
    statusBarStyle : Ti.UI.iPhone.StatusBar.LIGHT_CONTENT, 
    font : fonts[16]['normal'], 
    url : "stad.js", 
    //backButtonTitle: 'Back', 
    //title: e.source.title, 
    tabBarHidden : true, 
    navBarHidden : true, 
    tintColor : '#FFF' 
    }); 

    newWindow.open(); 
    }); 

}; 

// this method will be called if there is an error in accessing the  data 
xhr.onerror = function() { 
    // hide activity indicator 
activityIndicator.hide(); 

// display error 
alert(this.status + ': ' + this.statusText); 
return false; 
}; 

// open the remote feed 
xhr.open('GET', xmlFeed); 

// execute the call to the remote feed 
xhr.send(); 

city.js Код:

Ti.include('app_functions.js'); 

var newWin = Titanium.UI.currentWindow; 



// create a table to display news feeds-------------------------------- 
var itemsTable = Ti.UI.createTableView({ 
top : '11%', 
left : 0, 
leftImage : 'taxi.png', 
backgroundColor : '#DCEEDC', //E1E6EE 
bottom : '0%', 
// search : searchBar, 
filterAttribute : 'searchFilter' 
}); 
win.add(itemsTable); 

// define xmlFeed (you can customize this with any RSS feed) 
var xmlFeed = 'http://eventverket.nu/test/test5.xml'; 
//'http://83.254.164.137:1000/test.xml'; 

// create a new HTTP client object 
var xhr = Ti.Network.createHTTPClient(); 

// this method will process the remote data 
xhr.onload = function() { 

// create an xml object 
var xml = this.responseXML; 

// create an array that will store news items for our tableView 

var data = []; 



var items = xml.documentElement.getElementsByTagName("city"); 
for (var i=0; i<items.length; i++) { 
var row = Ti.UI.createTableViewRow({ 
    title: items.item(i).getTextContent() // 
}); 
data.push(row); 
} 
itemsTable.data = data; 





// when the user clicks on a row 
itemsTable.addEventListener('click', function(e) { 

// NEW WINDOW 
var newWindow = Titanium.UI.createWindow({ 
    backgroundColor : '#DCEEDC', //E1E6EE 
    statusBarStyle : Ti.UI.iPhone.StatusBar.LIGHT_CONTENT, 
    font : fonts[16]['normal'], 
    url : "stad.js", 
    //backButtonTitle: 'Back', 
    //title: e.source.title, 
    tabBarHidden : true, 
    navBarHidden : true, 
    tintColor : '#FFF' 
    }); 


}); 

}; 

// this method will be called if there is an error in accessing the data 
xhr.onerror = function() { 
// hide activity indicator 
activityIndicator.hide(); 

// display error 
alert(this.status + ': ' + this.statusText); 
return false; 
}; 

// open the remote feed 
xhr.open('GET', xmlFeed); 

// execute the call to the remote feed 
xhr.send(); 
+1

_Вы думаете, что этот вопрос отвечает, не зная вашего кода? _ ** NO **. Вопросы, требующие помощи по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. – baao

+0

Привет, Майкл! Мне очень жаль, я не думал, что это через! Вот мой код: http: // pastie.орг/10397882 Вот как я получаю данные XML: \t \t 'вар элементы = xml.documentElement.getElementsByTagName ("графство");' \t '// цикл по каждому item' \t' для (вар я = 0; г

+0

Я попытался изменить его в вашем вопросе, пожалуйста, исправить ее, если это не правильно. Пожалуйста, всегда включайте свой код в свой вопрос, когда вы его спрашиваете. Это поможет вам получить ответ – baao

ответ

1

Логика кода неправильно. Позвольте мне объяснить, почему ... Я собираюсь прокомментировать ваш код, и в конце вы поймете, что с ним не так.

var items = xml.documentElement.getElementsByTagName("county"); 

С этой строкой кода вы получаете все элементы «графства» XML-файла. В вашем случае есть только один элемент. Таким образом, items - это Node.List, который содержит только один элемент.

for (var i=0; i<items.length; i++) { 
    ... 
} 

С for заявлением вы перебором всех элементов в items. Другими словами, содержание заявления for будет повторяться items.lenght раз. Но items содержит только один элемент! Так что итераций не будет.

В вашем заявлении вы создаете новые строки. Но будет создана только одна строка из-за того, что нет итераций. По этой причине вы получаете только первый тег «countyname».

Я надеюсь, что вы поняли свою ошибку ... Теперь я дал вам простое решение для вашей проблемы:

var data = []; 
var items = xml.documentElement.getElementsByTagName("countyname"); 
for (var i=0; i<items.length; i++) { 
    var row = Ti.UI.createTableViewRow({ 
     title: items.item(i).getTextContent() 
    }); 
    data.push(row); 
} 
itemsTable.data = data; 

Мой код просто получить список всех элементов, чье имя тега является "countyname". Согласно вашему XML-файлу items будет Node.List с двумя элементами. Затем с помощью оператора for можно создавать новые строки из textContent каждого узла списка!

+0

Большое вам спасибо @ Риккардо Букко! Это работало greate! Но у меня остался один вопрос! когда я нажимаю на «Нью-Йорк», я просто хочу « Нью-Йорк', чтобы показать, но теперь оба из имени города появляются, есть ли способ сделать это? С наилучшими пожеланиями Filip –

+0

Добро пожаловать! Но, пожалуйста, покажите нам свой код: вы не можете помочь без него! Я не знаю, как вы пытаетесь его реализовать. Поскольку текущая проблема решена, отметьте мой ответ как ПРИНЯТЫЙ. Затем откройте другой вопрос с подробной информацией о другой проблеме: не забудьте указать нам столько деталей, что вы можете помочь (и показать нам, что вы уже сделали!) –

+0

Привет, @ @ Riccardo Bucco! Теперь я добавил весь свой код! Что я хочу сделать: получить все графства, а затем нажать графство и получить все города в этом графстве. Я не могу нажать «стрелку вверх», потому что у меня нет 15 очков:/ С уважением. Filip –

-1

Проверьте XML,

работы с

<food_company> 
    <county> 

завершившийся с

</lan> 
</food_company> 
+0

Привет @roy! Извините, это моя ошибка! Я перевел его из шведского языка и просто забыл перевести «lan» (графство) на английский для решения stackoverflow –

+0

Я не мог комментировать его сообщение, я думал, что это может ему помочь ... Так что отправлено здесь – Roy

Смежные вопросы