Читаем C++. Сборник рецептов полностью

  : animalList_(animalList), // заполняемый список

  parsingAnimalList_(false), // состояние анализа

  parsingAnimal_(false),     // состояние анализа

  parsingAnimalChild_(false) // состояние анализа

  {}

 // Получает уведомления от парсера при каждой встрече начала

 // какого-нибудь элемента

 void startElement(

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

  const XMLCh *const localname, // простое имя тега

  const XMLCh *const qname,     // квалифицированное имя тега

  const Attributes &attrs)      // Набор атрибутов

 {

  static XercesString animalList = fromNative("animalList");

  static XercesString animal = fromNative("animal");

  static XercesString xmlns =

   fromNative("http://www.feldman-family-circus.com");

  // Проверяет uri пространства имен

  if (uri != xmlns)

   throw runtime_error(

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

   );

  // (i)   Обновить флаги parsingAnimalList_, parsingAnimal_

  //       и parsingAnimalChild_, которые показывают, в какой части

  //       документа мы находимся

  // (ii)  Убедиться, что элементы имеют правильную вложенность

  //

  // (iii) Делегировать основную работу методу

  // startAnimalChild()

  if (!parsingAnimalList_) {

   // Мы только что встретили корень документа

   if (localname == animalList) {

    parsingAnimalList_ = true; // Обновить состояние анализа.

   } else {

    // Неправильная вложенность

    throw runtime_error(

     string("expected 'animalList', got ") + toNative(localname)

    );

   }

  } 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;

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных