Работа с XML в Android

Очень часто приходится хранить информацию форм и для этого можно использовать xml файлы. В данном уроке мы это и рассмотрим, как можно работать с файлами XML.

Библиотеки Android имеют набор классов для работы с XML-документами с произвольной структурой и содержанием.

 

 

Шаг 1.

Для того чтобы упаковать статический XML файл вместе с вашим приложением, вам нужно поместить его в папку: res/xml/

В каталоге res/ создайте подкаталог xml/ в котором будет располагаться наш ХМL-файл.

После чего вы получите возможность обращаться в коде программы к этому документу.

Шаг 2.

Рассмотрим загрузку XML-документа произвольной структуры из ресурсов в код программы.

Создадим приложения, которое будет уметь способность читать список имен, фамилий  и телефонов, определенных в XML-файле.

Теперь создадим XML файл который будет хранить Имена, Фамилии и номера телефонов сотрудников фирмы и сохраним его в res/xml/ под именем contacts.xml.

Вот как будут выглядеть XML файл contacts.xml

<contacts>
	<contact 
		first_name="Иван" 
		last_name="Иваненко"
		phone="090507"/>
	<contact 
		first_name="Василий"
		last_name="Пупкин"
		phone="123456"/>
	<contact 
		first_name="Денис"
		last_name="Денисенко"
		phone="654879"/>
	<contact 
		first_name="Данил"
		last_name="Даниленко"
		phone="234587"/>
</contacts>

Шаг 3.

Создадим View состоять она будет с LinearLayout и ListView и назовем main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >

    <ListView
            android:id="@android:id/list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:drawSelectorOnTop="false" />

</LinearLayout>

Шаг 4.

Загружаем файл contacts.xml, созданный ранее:

XmlPullParser parser = getResources().getXml(R.xml.contacts);

Метод getXml() возвращает XmlPullParser, используя который можно прочитать загруженный XML-документ в цикле while:

while (parser.getEventType()!= XmlPullParser.END_DOCUMENT) {
    if (parser.getEventType() == XmlPullParser.START_TAG
            && parser.getName().equals("contact")) {
        list.add(parser.getAttributeValue(0) + " "
                + parser.getAttributeValue(1) + "\n"
                + parser.getAttributeValue(2));
    }
    parser.next();
}

В конечном итоге ваше приложение должно выглядеть так:

 

Весь код MyActivity:

package com.devcolibri.ReadingXMLFile;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import org.xmlpull.v1.XmlPullParser;

import java.util.ArrayList;

public class MyActivity extends ListActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ArrayList<String> list = new ArrayList<String>();

        try {
            XmlPullParser parser = getResources().getXml(R.xml.contacts);

            while (parser.getEventType()!= XmlPullParser.END_DOCUMENT) {
                if (parser.getEventType() == XmlPullParser.START_TAG
                        && parser.getName().equals("contact")) {
                    list.add(parser.getAttributeValue(0) + " "
                            + parser.getAttributeValue(1) + "\n"
                            + parser.getAttributeValue(2));
                }
                parser.next();
            }
        }
        catch (Throwable t) {
            Toast.makeText(this,
                    "Ошибка при загрузке XML-документа: " + t.toString(), 4000)
                    .show();
        }

        setListAdapter(new ArrayAdapter<String>(
                this, android.R.layout.simple_list_item_1, list));
    }
}

Обратите внимание что наследуется MyActivity не от Activity а от ListActivity.

Урок создан: 08 марта 2013 | Просмотров: 20186 | Автор: Александр Барчук | Правила перепечатки


Добавить комментарий

Добавить комментарий

Ваш e-mail не будет опубликован.

Комментарии:

  • 22 марта 2013 в 15:24

    Алексей

    Скажите пожалуйста, а как вывести определенный контакт. Ну скажем Василия Пупкина?

    • 22 марта 2013 в 15:40

      Александр Барчук

      Можно в момент добавление данных с XML в список List добавить только имя и фамилию list.add(parser.getAttributeValue(0) + » » + parser.getAttributeValue(1) а потом сравнивать по фамилии и выводить его, или же добавить каждому пользователю уникальный идентификатор и получать его по нем.

      • 04 мая 2013 в 01:17

        Сергей

        А как насчёт продолжения урока? Хотелось бы увидеть обработку нажатий на данный список и парсинг файла не с xml/ а допустип скачанный или просто с карты…. а также сохранение изменённого xml файла…

        • 04 мая 2013 в 10:49

          Александр Барчук

          Сергей, предложение по написанию продолжения к этому уроку поддерживаю и в скором времени напишу урок. Чтобы вы не пропустили когда урок опубликуется, подписуйтесь в группу вконтакте или же на RSS ленту.

      • 23 марта 2014 в 20:47

        Евгений

        А можете подсказать, как спарсить инфу с сайта, потом ее разложить по полочкам и использовать в своем приложении, допустим в погодном информере?

  • 06 февраля 2014 в 21:30

    Nik

    Eclipse Не видит проект(