解析XML不解析整个文件

时间:2016-02-22 12:06:35

标签: java android xml

我有这个XML

   <CurrencyExchangeMap>
    <CurrencyExchangePoint>
        <Address>addr 3</Address>
        <Latitude>41.6940265</Latitude>
        <Longitude>44.7985044</Longitude>
    </CurrencyExchangePoint>
    <CurrencyExchangePoint>
        <Address>addr 4</Address>
        <Latitude>41.7024424</Latitude>
        <Longitude>44.8058617</Longitude>
    </CurrencyExchangePoint>
    <CurrencyExchangePoint>
        <Address>addr 5</Address>
        <Latitude>41.6954418</Latitude>
        <Longitude>44.7046725</Longitude>
    </CurrencyExchangePoint>
    </CurrencyExchangeMap>

它有1000+ CurrencyExchangePoint但是当我解析它们时它只返回167项。怎么了?我已经在手写笔工作室和我自己检查过xml文件,但没有发现任何错误。

List<MapLT> mapLTs = null;
try {
        XMLPullParserHandler parserHandler = new XMLPullParserHandler();
        mapLTs = parserHandler.parse(getAssets().open("ltlg.xml"));

        for (MapLT item : mapLTs) {
            LatLng lt = new LatLng(item.getLatitude(), item.getLongitude());
            String title = item.getAddress();
            googleMap.addMarker(new MarkerOptions().position(lt).title(title));
        }

    } catch (Exception ex) {
        ex.printStackTrace();
    }

和我的xmlpullparse类:

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

public class XMLPullParserHandler {
List<MapLT> mapLTList;

private MapLT mapLT;
private String text;

public XMLPullParserHandler() {
    mapLTList = new ArrayList<MapLT>();
}

public List<MapLT> getMapLT(){
    return mapLTList;
}

public List<MapLT> parse(InputStream is){
    XmlPullParserFactory factory = null;
    XmlPullParser parser = null;

    try{
        factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);

        parser = factory.newPullParser();
        parser.setInput(is, null);

        int eventType = parser.getEventType();
        while(eventType != XmlPullParser.END_DOCUMENT){
            String tagname = parser.getName();
            switch (eventType){
                case XmlPullParser.START_TAG:
                    if(tagname.equalsIgnoreCase("CurrencyExchangePoint")){
                        mapLT = new MapLT();
                    }
                    break;
                case XmlPullParser.TEXT:
                    text = parser.getText();
                    break;
                case XmlPullParser.END_TAG:
                    if(tagname.equalsIgnoreCase("CurrencyExchangePoint")){
                        mapLTList.add(mapLT);
                    } else if(tagname.equalsIgnoreCase("Address")){
                        mapLT.setAddress(text);
                    } else if(tagname.equalsIgnoreCase("Latitude")){
                        mapLT.setLatitude(Float.parseFloat(text));
                    } else if(tagname.equalsIgnoreCase("Longitude")){
                        mapLT.setLongitude(Float.parseFloat(text));
                    }
                    break;
                default:
                    break;
            }
            eventType = parser.next();
        }

    }catch (Exception ex){
        ex.printStackTrace();
    }
    return  mapLTList;
}

}

2 个答案:

答案 0 :(得分:0)

我无法在您的代码中发现问题,因此我的策略是添加日志。 首先打印您获得的所有事件标签和标签名称。

答案 1 :(得分:0)

问题是来自6500的一个标签的值是空的.. 我花了4个小时