Иду от простого, начинаю с 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;
}
После
employee = new Employee();
добавьте
employees.add(employee);
должно получится так
if (tagname.equalsIgnoreCase("routes")) {
// create a new instance of employee
employee = new Employee();
employees.add(employee);
}
и, чтобы не путаться, я бы объявил employee
как локальную переменную.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
MySQL в операторах условия выдает ошибку, но явсе делаю по справочнику
Здравствуйте, как можно залить видео в mysql, то есть сделать вставку через phpmyadmin, чтобы потом можно было его получить на сайте? Если есть скиньте...
Написал небольшую программу на C++ с файлом CL на C, всё работаетВ новых версиях OpenCL они допускают использование C++ в файлах CL
задача проста, но не могу разобраться, мне нужно построчно считывать из файла