在Android上解析xml数据
我想要的是收集ArrayList中的所有结果并在该ArrayList中迭代并显示结果,但是当我尝试运行下面的代码时,它只返回一个元素 我有三节课在Android上解析xml数据,android,xml-parsing,Android,Xml Parsing,我想要的是收集ArrayList中的所有结果并在该ArrayList中迭代并显示结果,但是当我尝试运行下面的代码时,它只返回一个元素 我有三节课 public class XMLDataCollected { ArrayList<String> names = new ArrayList<String>(); ArrayList<String> vicinities = new ArrayList<String>();
public class XMLDataCollected {
ArrayList<String> names = new ArrayList<String>();
ArrayList<String> vicinities = new ArrayList<String>();
ArrayList<String> types = new ArrayList<String>();
ArrayList<String> lats = new ArrayList<String>();
ArrayList<String> longs = new ArrayList<String>();
String name = null;
String vicinity = null;
String type = null;
String lat = null;
String longi = null;
public ArrayList<String> getName() {
return names;
}
public void setName(String name) {
this.names.add(name);
this.name = name;
Log.i("This is the name: ", name + "size: " + names.size());
}
public ArrayList<String> getVicinity() {
return vicinities;
}
public void setVicinity(String vicinity) {
this.vicinities.add(vicinity);
this.vicinity = vicinity;
Log.i("This is the vicinity: ", vicinity);
}
public ArrayList<String> getType() {
return types;
}
public void setType(String type) {
this.types.add(type);
this.type = type;
Log.i("This is the type: ", type);
}
public ArrayList<String> getLat() {
return lats;
}
public void setLat(String lat) {
this.lats.add(lat);
this.lat = lat;
Log.i("This is the latitude: ", lat);
}
public ArrayList<String> getLongi() {
return longs;
}
public void setLongi(String longi) {
this.longs.add(longi);
this.longi = longi;
Log.i("This is the longitude: ", longi);
}
public String populate(){
StringBuilder sb = new StringBuilder();
sb.append(getName());
sb.append(getVicinity());
sb.append(getType());
sb.append(getLat());
sb.append(getLongi());
return sb.toString();
}
2.
public class HandlingXMLStuff extends DefaultHandler {
String elementValue = null;
Boolean elementOn = false;
XMLDataCollected data;
public ArrayList<String> getData() {
return data.getName();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
elementOn = true;
if (localName.equals("result")) {
data = new XMLDataCollected();
} else if (localName.equals("CD")) {
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
elementOn = false;
/**
* Sets the values after retrieving the values from the XML tags
* */
if (localName.equalsIgnoreCase("name"))
data.setName(elementValue);
else if (localName.equalsIgnoreCase("vicinity"))
data.setVicinity(elementValue);
else if (localName.equalsIgnoreCase("type"))
data.setType(elementValue);
else if (localName.equalsIgnoreCase("lat"))
data.setLat(elementValue);
else if (localName.equalsIgnoreCase("lng"))
data.setLongi(elementValue);
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
if (elementOn) {
elementValue = new String(ch, start, length);
elementOn = false;
}
}
}
3.
public class XMLParsingActivity extends Activity implements OnClickListener {
static final String baseURL = "http://www.google.com/ig/api?weather=";
static final String test = "";
TextView tv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button bone = (Button) findViewById(R.id.btnone);
tv = (TextView) findViewById(R.id.tvWeather);
bone.setOnClickListener(this);
}
public String buildURL(int lat, int longi){
String url = "";
return url;
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
try{
URL website = new URL(test);
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
HandlingXMLStuff doingWork = new HandlingXMLStuff();
XMLDataCollected xdc = new XMLDataCollected();
xr.setContentHandler(doingWork);
xr.parse(new InputSource(website.openStream()));
StringBuilder sb = new StringBuilder();
String name = null;
for(int index = 0; index < doingWork.getData().size(); index++){
sb.append(doingWork.getData().get(index));
Log.i("test","" + index);
}
// tv.setText("Name: " + name + "\n" + "Vicinity: " + vicinity + "\n" + "Type: " + type + "\n "
// + "Latitude: " + lat + "\n " + "Longitude: " + longi
// );
tv.setText("The size: " + sb);
}catch(Exception ex){
tv.setText("Error" + ex.toString());
}
}
}
public类XMLDataCollected{
ArrayList name=新的ArrayList();
ArrayList邻域=新的ArrayList();
ArrayList类型=新的ArrayList();
ArrayList lats=新的ArrayList();
ArrayList longs=新的ArrayList();
字符串名称=null;
字符串=空;
字符串类型=null;
字符串lat=null;
字符串longi=null;
公共ArrayList getName(){
返回姓名;
}
公共void集合名(字符串名){
此.names.add(name);
this.name=名称;
Log.i(“这是名称:”,名称+“大小:”+names.size());
}
公共ArrayList getNeighboration(){
返回近邻;
}
公共区域附近(字符串附近){
此。邻近。添加(邻近);
这附近=附近;
Log.i(“这是附近:”,附近);
}
公共ArrayList getType(){
返回类型;
}
公共void集合类型(字符串类型){
this.types.add(type);
this.type=type;
Log.i(“这是类型:”,类型);
}
公共数组列表getLat(){
返回lats;
}
公共void setLat(字符串lat){
本.lats.添加(lat);
this.lat=lat;
Log.i(“这是纬度:,纬度);
}
公共阵列列表getLongi(){
返回多头;
}
公共无效setLongi(字符串longi){
this.longs.add(longi);
this.longi=longi;
Log.i(“这是经度:”,longi);
}
公共字符串填充(){
StringBuilder sb=新的StringBuilder();
sb.append(getName());
某人附加(getappend());
sb.append(getType());
sb.append(getLat());
sb.append(getLongi());
使某人返回字符串();
}
2.
公共类HandlingXMLStuff扩展了DefaultHandler{
String elementValue=null;
布尔元素=false;
收集的数据;
公共ArrayList getData(){
返回data.getName();
}
@凌驾
public void startElement(字符串uri、字符串localName、字符串qName、,
属性)引发SAX异常{
//TODO自动生成的方法存根
elementOn=true;
if(localName.equals(“结果”)){
数据=新XMLDataCollected();
}else if(localName.equals(“CD”)){
}
}
@凌驾
公共void endElement(字符串uri、字符串localName、字符串qName)
抛出SAX异常{
elementOn=false;
/**
*从XML标记检索值后设置值
* */
if(localName.equalsIgnoreCase(“名称”))
data.setName(elementValue);
else if(localName.equalsIgnoreCase(“邻近”))
数据集邻近度(元素值);
else if(localName.equalsIgnoreCase(“类型”))
data.setType(elementValue);
else if(localName.equalsIgnoreCase(“lat”))
data.setLat(elementValue);
else if(localName.equalsIgnoreCase(“lng”))
data.setLongi(elementValue);
}
@凌驾
公共无效字符(字符[]ch,整数开始,整数长度)
抛出SAX异常{
//TODO自动生成的方法存根
if(elementOn){
elementValue=新字符串(ch、开始、长度);
elementOn=false;
}
}
}
3.
公共类XMLParsingActivity扩展了活动实现OnClickListener{
静态最终字符串baseURL=”http://www.google.com/ig/api?weather=";
静态最终串测试=”;
文本视图电视;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
按钮骨骼=(按钮)findViewById(R.id.btnone);
tv=(文本视图)findViewById(R.id.tvWeather);
bone.setOnClickListener(这个);
}
公共字符串构建URL(int-lat,int-longi){
字符串url=“”;
返回url;
}
@凌驾
公共void onClick(视图arg0){
//TODO自动生成的方法存根
试一试{
URL网站=新URL(测试);
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sp=spf.newSAXParser();
XMLReader xr=sp.getXMLReader();
HandlingXMLStuff doingWork=新HandlingXMLStuff();
XMLDataCollected xdc=新XMLDataCollected();
xr.setContentHandler(doingWork);
xr.parse(新输入源(website.openStream());
StringBuilder sb=新的StringBuilder();
字符串名称=null;
for(int index=0;index
这是示例XML文件
<result>
<name>Zaaffran Restaurant - BBQ and GRILL, Darling Harbour</name>
<vicinity>Harbourside Centre 10 Darling Drive, Darling Harbour, Sydney</vicinity>
<type>restaurant</type>
<type>food</type>
<type>establishment</type>
<geometry>
<location>
<lat>-33.8719830</lat>
<lng>151.1990860</lng>
</location>
</geometry>
<rating>3.9</rating>
</result>
扎夫兰餐厅-烧烤和烧烤,达令港
悉尼达令港达令大道10号海港中心
餐厅
食物
建立
-33.8719830
151.1990860
List<String> names = new ArrayList<String>();
....
....