Чтение онлайн

на главную - закладки

Жанры

C++. Сборник рецептов

Когсуэлл Джефф

Шрифт:

throw runtime_error(

string("wrong namespace uri ") + toNative(uri)

);

if (localname == animal) {

// Добавить в список объект Animal; это будет

// "текущий объект Animal"

animalList_.push_back(Animal);

} else if (localname != animalList) {

Animal& animal = animalList_.back;

if (localname == vet) {

//
Мы встретили элемент "ветеринар".

animal.setVeterinarian(contactFromAttributes(attrs));

} else if (localname == trainer) {

// Мы встретили элемент "дрессировщик".

animal.setTrainer(contactFromAttributes(attrs));

} else {

// Мы встретили элемент "кличка", "вид животного" или

// "дата рождения". Их содержимое будет получено

// при обратном вызове функции characters.

currentText_.clear;

}

}

 }

 // Если текущий элемент представляет кличку, вид животного или дату

 // рождения, используйте хранимый в currentText_ текст для установки

 // соответствующего свойства текущего объекта Animal.

 void endElement(

const XMLCh *const uri, // URI пространства имен

const XMLCh *const localname, // имя тега без префикса NS

const XMLCh *const qname) // имя тега + префикс NS

 {

static XercesString animalList = fromNative("animal-list");

static XercesString animal = fromNative("animal");

static XercesString name = fromNative("name");

static XercesString species = fromNative("species");

static XercesString dob = fromNative("dateOfBirth");

if (localname!= animal && localname!= animalList) {

// currentText_ содержит текст элемента, который был

// добавлен. Используйте его для установки свойств текущего

// объекта Animal.

Animal& animal = animalList_.back;

if (localname == name) {

animal setName(toNative(currentText_));

} else if (localname == species) {

animal.setSpecies(toNative(currentText_));

} else if (localname == dob) {

animal.setDateOfBirth(toNative(currentText_));

}

}

 }

 //
Получает уведомления, когда встречаются символьные данные

 void characters(const XMLCh* const chars,

const unsigned int length) {

// Добавить символы в конец currentText_ для обработки методом

// endElement

currentText_.append(chars, length);

 }

private:

 vector<Animal>& animalList_;

 XercesString currentText_;

};

Пример 14.7. SAX2 ErrorHandler

#include <stdexcept> // runtime_error

#include <xercesc/sax2/DefaultHandler.hpp>

// Получает уведомления об ошибках.

class CircusErrorHandler : public DefaultHandler {

public:

 void warning(const SAXParseException& e) {

/* нет действий */

 }

 void error(const SAXParseExceptionf& e) {

throw runtime_error(toNative(e.getMessage));

 }

 void fatalError(const SAXParseException& e) { error(e); }

};

Пример 14.8. Синтаксический анализ документа animals.xml при помощи программного интерфейса SAX2

#include <exception>

#include <iostream> // cout

#include <memory> // auto_ptr

#include <vector>

#include <xercesc/sax2/SAX2XMLReader.hpp>

#include <xercesc/sax2/XMLReaderFactory.hpp>

#include <xercesc/util/PlatformUtils.hpp>

#include "animal.hpp"

#include "xerces_strings.hpp" // Пример 14.4

using namespace std;

using namespace xercesc;

// Утилита RAII инициализирует парсер и освобождает ресурсы

// при выходе из области видимости

class XercesInitializer {

public:

 XercesInitializer { XMLPlatformUtils::Initialize; }

 ~XercesInitializer { XMLPlatformUtils::Terminate; }

private:

 // Запретить копирование и присваивание

Поделиться:
Популярные книги

Последний Паладин. Том 2

Саваровский Роман
2. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 2

Зубных дел мастер

Дроздов Анатолий Федорович
1. Зубных дел мастер
Фантастика:
научная фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Зубных дел мастер

Истребитель. Ас из будущего

Корчевский Юрий Григорьевич
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.25
рейтинг книги
Истребитель. Ас из будущего

Честное пионерское! Часть 3

Федин Андрей Анатольевич
3. Честное пионерское!
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Честное пионерское! Часть 3

Обгоняя время

Иванов Дмитрий
13. Девяностые
Фантастика:
попаданцы
5.00
рейтинг книги
Обгоняя время

Страж. Тетралогия

Пехов Алексей Юрьевич
Страж
Фантастика:
фэнтези
9.11
рейтинг книги
Страж. Тетралогия

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Имя нам Легион. Том 4

Дорничев Дмитрий
4. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 4

Девятый

Каменистый Артем
1. Девятый
Фантастика:
боевая фантастика
попаданцы
9.15
рейтинг книги
Девятый

Морской волк. 1-я Трилогия

Савин Владислав
1. Морской волк
Фантастика:
альтернативная история
8.71
рейтинг книги
Морской волк. 1-я Трилогия

Отмороженный 8.0

Гарцевич Евгений Александрович
8. Отмороженный
Фантастика:
постапокалипсис
рпг
аниме
5.00
рейтинг книги
Отмороженный 8.0

Совершенный: охота

Vector
3. Совершенный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Совершенный: охота

Калибр Личности 1

Голд Джон
1. Калибр Личности
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Калибр Личности 1

Личник

Валериев Игорь
3. Ермак
Фантастика:
альтернативная история
6.33
рейтинг книги
Личник