xml XmlPullParser

209
14 апреля 2018, 21:32

Иду от простого, начинаю с XML PullParser.

Вопрос: у меня XML такого вида:

XML

<data>
    <e>
        <message>
        </message>
    </e>
    <from>
        <id>
            487
        </id>
      </to>
    <routes>
        <item>
            <index>0</index>
            <from_date_part>from_night</from_date_part>
            <to_date_part>to_morning</to_date_part>
            <info/>           
        </item>
        <item>
            <index>0</index>
            <from_date_part>from_night</from_date_part>
            <to_date_part>to_morning</to_date_part>
            <info/>           
        </item>
         <item>
            <index>0</index>
            <from_date_part>from_night</from_date_part>
            <to_date_part>to_morning</to_date_part>
            <info/>           
        </item>
</routes>
</data>

Но мне нужна выборка только тега </routes> и там читать все <item> их может быть несколько.

делаю лист вью но он почему то? читает только последний <item>, почему так?

public class XmlPullParserHandler {
private List<Employee> employees= new ArrayList<Employee>();
private Employee employee;
private String text;
public List<Employee> getEmployees() {
    return employees;
}
public List<Employee> parse(InputStream is) {
    try {
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser  parser = factory.newPullParser();
       // parser.setInput(is, null); //было так
        parser.setInput(is, "UTF-8");
        // parser.setInput(getInputStream(url), "UTF-8");
        int eventType = parser.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {
            String tagname = parser.getName();
            if (eventType == XmlPullParser.START_TAG) {
                    if (tagname.equalsIgnoreCase("routes")) {
                        // create a new instance of employee
                        employee = new Employee();
                    }
            }
            if (eventType == XmlPullParser.TEXT) {
                text = parser.getText();
            }
            if (eventType ==  XmlPullParser.END_TAG) {
                if (tagname.equalsIgnoreCase("item")) {
                    // add employee object to list
                    employees.add(employee);
                } else if (tagname.equalsIgnoreCase("index")) {
                    employee.setId(text);
                } else if (tagname.equalsIgnoreCase("from_date_part")) {
                    employee.setName(text);
                } else if (tagname.equalsIgnoreCase("to_date_part")) {
                    employee.setSalary(text);
                }
            }
            eventType = parser.next();
        }
    } catch (XmlPullParserException | IOException e)
    {e.printStackTrace();}
    return employees;
}
Answer 1

После

employee = new Employee();

добавьте

employees.add(employee);

должно получится так

if (tagname.equalsIgnoreCase("routes")) {
    // create a new instance of employee
    employee = new Employee();
    employees.add(employee);
}

и, чтобы не путаться, я бы объявил employee как локальную переменную.

READ ALSO
Как создавать ветвления в MySQL: BEGIN, IF THEN?

Как создавать ветвления в MySQL: BEGIN, IF THEN?

MySQL в операторах условия выдает ошибку, но явсе делаю по справочнику

202
Хранение видео в MySQL

Хранение видео в MySQL

Здравствуйте, как можно залить видео в mysql, то есть сделать вставку через phpmyadmin, чтобы потом можно было его получить на сайте? Если есть скиньте...

176
Как использовать связку OpenCL 2.2 и SPIR-v 1.2

Как использовать связку OpenCL 2.2 и SPIR-v 1.2

Написал небольшую программу на C++ с файлом CL на C, всё работаетВ новых версиях OpenCL они допускают использование C++ в файлах CL

200
как считать getlin-ом с файла с++

как считать getlin-ом с файла с++

задача проста, но не могу разобраться, мне нужно построчно считывать из файла

182