result.setName(textValue(element));

 } else {

  throw runtime_error("no name attribute");

 }

 // Прочитать элемент вида животного

 element = element->NextSiblingElement();

 if (element && strcmp(element->Value(), species") == 0) {

  // Вторым дочерним элементом animal является вид животного

  // (элемент "species"); используйте его текстовое значение для

  // установки вида в объекте result

  result.setSpecies(textValue(element));

 } else {

  throw runtime_error(""no species attribute");

 }

 // Прочитать элемент даты рождения

 element = element->NextSiblingElement();

 if (element && strcmp(element->Value(), "dateOfBirth") == 0) {

  // Третьим дочерним элементом animal является дата рождения

  // (элемент "dateOfBirth"));

  // используйте его текстовое значение для установки даты

  // рождения в объекте result

  result.setDateOfBirth(textValue(element));

 } else {

  throw runtime_error("no dateOfBirth attribute");

 }

 // Прочитать элемент ветеринара

 element = element->NextSiblingElement();

 if (strcmp(element->Value(), "veterinarian") == 0) {

  // Четвертым дочерним элементом animal является ветеринар (элемент

  // "veterinarian"); используйте его для конструирования объекта

  // Contact и установки имени ветеринара в объекте result

  result.setVeterinarian(nodeToContact(element));

 } else {

  throw runtime_error("no veterinarian attribute");

 }

 // Прочитать элемент дрессировщика

 element = element->NextSiblingElement();

 if (strcmp(element->Value(), "trainer") == 0) {

  // Пятым элементом animal является дрессировщик (элемент "trainer");

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

  // Contact и установки дрессировщика в объекте result

  result.setTrainer(nodeToContact(element));

 } else {

  throw runtime_error("no trainer attribute");

 }

 // Убедиться в отсутствии других дочерних элементов

 element = element->NextSiblingElement();

 if (element != 0) {

  throw runtime_error(

   string("unexpected element:") + element->Value()

  );

 }

 return result;

}

int main() {

 using namespace std;

 try {

  vector animalList;

  // Обработать "animals.xml"

  TiXmlDocument doc("animals.xml");

  if (!doc.LoadFile())

   throw runtime_error("bad parse");

  // Убедиться, что корневым является список животных

  TiXmlElement* root = doc.RootElement();

  if (strcmp(root->Value(), "animalList") != 0) {

   throw runtime_error(string("bad root: ") + root->Value());

  }

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

  // список животных

  for (TiXmlElement* animal = root->FirstChildElement();

   animal; animal = animal->NextSiblingElement()) {

   animalList.push_back(nodeToAnimal(animal));

  }

  // Напечатать клички животных

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

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