Программируем клиент для блога на WordPress (часть 3 SAX XML parsing)

Всем кто читает привет!

В последний раз мы говорили о программировании баз данных под андроид в связи с нашим клиентом для блога. Сегодня поговорим о загрузке файлов и о парсинге XML.

Итак, мы с вами уже реализовали серверную часть которая в зависимости от передаваемых ей в URL параметров возвращает нам либо некий xml файлик, либо html страничку с определенным постом из базы данных. Теперь давайте научимся разбирать этот xml файлик (запихивать его содержимое в базу мы слава Ктулху  уже умеем).

Сегодня пойдем дельше и попробуем разобрать (распарсить) полученный от сервера xml файл. Вообще надо заметить, что в java вообще и в Android в частности существует два варанта для работы с XML. Первый вариант — это DOM (Document Object Model). Он предполагает загрузку в память всего XML файла, и затем мы можем перемещаться по файлу, получать информацию о узлах и контенте, который в нем хранится. Второй вариант — SAX (Simple API for XML) — это событийно-ориентированный парсер. На вход такого парсера подается некий XML файл и затем мы обрабатваем те или иные события возникающие в ходе чтения этого файла парсером. Событиями могут быть, например, новый открывающий тег, новый закрывающий тег, и т.д. Именно такой подход мы и будем использовать, как наименее ресурсоемкий.

Для реализации такого парсера нам требуется создать класс, наследующий у класса org.xml.sax.helpers.DefaultHandler. У этого класса есть целая куча методов которые мы можем переопрелелить. Например startDocument() — вызываемый при начале документа endDocument() — вызываемый когда парсер доходит до конца документа, startElement() — обрабатывает начало нового тега, endElement() — обрабатывает закрывающий тег и так далее. Подробнее вы можете посмотреть здесь. нам с вами необходимо использовать только два из них. Итак вот код класса:

package ru.davidmd.zabavareader;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class ParserHandler extends DefaultHandler {
	dbExtender db;

	ParserHandler(dbExtender db) {
		this.db = db;
	}

	@Override
	public void startElement(String namespaceURI, String localName,
			String qName, Attributes atts) throws SAXException {
		if (localName.toLowerCase().equals("header")) {
			String title = atts.getValue("title");
			String content = atts.getValue("content");
			String date = atts.getValue("date");
			int id = Integer.parseInt(atts.getValue("id"));
			String guid = atts.getValue("guid");
			db.addpost(title, content, date, id, guid);

		}
	}

	@Override
	public void endDocument() {
		try {
			super.endDocument();
		} catch (SAXException e) {
			e.printStackTrace();
		}
	}
}

А теперь давайте смотереть что мы здесь натворили. Во первых конструктор в который мы передаем ссылку на объект класса dbExtender из прошлого урока. Во вторых у нас имеется метод startElement() в котором мы обрабатываем элемент. Сначала мы проверяем если текущий тег имеет название «header» то затем получаем все атрибуты тега и записываем их в базу данных. Ну и в третьих я зачем-то переопределил метод endDocument() но честно говоря это абсолютно лишнее 🙂 и его можно смело отсюда выкинуть :).

Теперь когда мы вызовем парсер с нашим хендлером наши методы обработчики будут вызываться при соответствующих условиях.

На сегодня пожалуй хватит. Есть вопросы? Пишите в комментах!

Вам понравилось? Было полезно? Поделитесь!

Опубликовать в Facebook
Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс
Запись опубликована в рубрике Android, Новичку, Программирование с метками , , , , , . Добавьте в закладки постоянную ссылку.

8 комментариев на «Программируем клиент для блога на WordPress (часть 3 SAX XML parsing)»

  1. Татьяна говорит:

    Описано все супер, правда для совсем новичков есть много непоняток.
    Хотелось бы посмотреть резкльтат (само приложение), а также покопаться в исходниках.
    Вообще хочу написать приложение — парсер новостей с моего сайта sad-dizayn.ru с обновлением ленты при запуске. Если можете помочь, буду очень благодарна.

  2. Татьяна говорит:

    Вопросик.
    А парсер заканчивать будем?
    Так чтобы до конца доделать, до запуска проекта.
    А то бросили на пол пути…

  3. sonyk говорит:

    Приветствую, как я понимаю полноценный клиент так и не написан. Будьте любезны выложите исходники. Заранее благодарен.

  4. sonyk говорит:

    Да и еще, как вы обращаетесь к самому php файлу который на сервере с сайтом?

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *