在Android上解析xml数据

在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>();

我想要的是收集ArrayList中的所有结果并在该ArrayList中迭代并显示结果,但是当我尝试运行下面的代码时,它只返回一个元素

我有三节课

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>();
      ....
      ....