XML数据只展示了一部分
XML data only show some of it
所以我试图从 XML 文件中获取数据,但是当我遍历它并想取出 "countyname" 时,我只得到第一个然后它停止了。 XMl 错了吗?因为我尝试使用其他 XML 并且我的代码可以正常工作,将数据放入我的表视图中。
最好的祝福!
菲利普
<?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();
勾选xml,
开始于
<food_company>
<county>
结束于
</lan>
</food_company>
你的代码逻辑有问题。让我解释一下为什么......我将评论你的代码,最后你会明白它有什么问题。
var items = xml.documentElement.getElementsByTagName("county");
通过这行代码,您将获得 XML 文件的所有 "county" 元素。在您的情况下,只有一个元素。所以 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 创建新行!
所以我试图从 XML 文件中获取数据,但是当我遍历它并想取出 "countyname" 时,我只得到第一个然后它停止了。 XMl 错了吗?因为我尝试使用其他 XML 并且我的代码可以正常工作,将数据放入我的表视图中。 最好的祝福! 菲利普
<?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();
勾选xml,
开始于
<food_company>
<county>
结束于
</lan>
</food_company>
你的代码逻辑有问题。让我解释一下为什么......我将评论你的代码,最后你会明白它有什么问题。
var items = xml.documentElement.getElementsByTagName("county");
通过这行代码,您将获得 XML 文件的所有 "county" 元素。在您的情况下,只有一个元素。所以 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 创建新行!