C++. Сборник рецептов
Шрифт:
);
}
} else if (!parsingAnimal_) {
// Мы только что встретили новое животное
if (localname == animal) {
parsingAnimal_ = true; // Обновить состояние
// анализа.
animalList_.push_back(Animal); // Добавить в список объект
// Animal.
} else {
//
Неправильная вложенность
throw runtime error(
string("expected 'animal', got ") + toNative(localname)
);
}
} else {
// Вы находимся в середине анализа элемента, описывающего
// животного.
if (parsingAnimalChild_) {
// Неправильная вложенность
throw runtime_error("bad animal element");
}
// Обновить состояние анализа
parsingAnimalChild_ = true;
// Пусть startAnimalChild выполнит реальную работу
startAnimalChild(uri, localname, qname, attrs);
}
}
void endElement(
const XMLCh *const uri, // uri пространства имен
const XMLCh *const localname, // простое имя тега
const XMLCh *const qname ) // квалифицированное имя тега
{
static XercesString animalList = fromNative("animal-list");
static XercesString animal = fromNative("animal");
// Обновить флаги parsingAnimalList, parsingAnimal_
// и parsingAnimalChild_; делегировать основную работу
// endAnimalChild
if (localname == animal) {
parsingAnimal_ = false;
} else if (localname == animalList) {
parsingAnimalList_ = false;
} else {
endAnimalChild(uri, localname, qname);
parsingAnimalChild_ = false;
}
}
// Получает уведомления о встрече символьных данных
void characters(const XMLCh* const chars, const unsigned int length) {
// Добавляет символы в конец currentText_ для обработки
методом
// endAnimalChild
currentText.append(chars, length);
}
private:
// Если текущий элемент представляет ветеринара или дрессировщика,
// используйте attrs для конструирования объекта Contact для
// текущего Animal; в противном случае очистите currentText_,
// подготавливая обратный вызов characters
void startAnimalChild(
const XMLCh *const uri, // uri пространства имен
const XMLCh *const localname, // простое имя тега
const XMLCh *const qname, // квалифицированное имя тега
const Attributes &attrs ) // Набор атрибутов
{
static XercesString vet = fromNative("veterinarian");
static XercesString trainer = fromNative("trainer");
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 endAnimalChild(
const XMLCh *const uri, // uri пространства имен
const XMLCh *const localname, // простое имя тега
const XMLCh *const qname) // квалифицированное имя тега
{
static XercesString name = fromNative("name");
static XercesString species = fromNative("species");
Поделиться:
Популярные книги
Пипец Котенку! 2
2. РОС: Пипец Котенку!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
70 Рублей - 2. Здравствуй S-T-I-K-S
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
постапокалипсис
5.00
рейтинг книги
Два лика Ирэн
Любовные романы:
любовно-фантастические романы
6.08
рейтинг книги
Сумеречный Стрелок 3
3. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Невеста вне отбора
Любовные романы:
любовно-фантастические романы
7.33
рейтинг книги
Жизнь в подарок
2. Калейдоскоп
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
По машинам! Танкист из будущего
1. Я из СМЕРШа
Фантастика:
боевая фантастика
попаданцы
альтернативная история
6.36
рейтинг книги
Новый Рал 2
2. Рал!
Фантастика:
фэнтези
7.62
рейтинг книги
Аргумент барона Бронина 2
2. Аргумент барона Бронина
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Эволюционер из трущоб. Том 5
5. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Миф об идеальном мужчине
Детективы:
прочие детективы
9.23
рейтинг книги
Возвышение Меркурия. Книга 2
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Неудержимый. Книга XXII
22. Неудержимый
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Шлейф сандала
Фантастика:
фэнтези
6.00