Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C++. Π‘Π±ΠΎΡ€Π½ΠΈΠΊ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ²Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 125

Автор Π”. БтСфСнс

    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");

  static XercesString dob = fromNative("dateOfBirth");

  // 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_));

  }

 }


 vector<Animal>& animalList_; // заполняСмый список

 bool parsingAnimalList_;     // состояниС Π°Π½Π°Π»ΠΈΠ·Π°

 bool parsingAnimal_;         // состояниС Π°Π½Π°Π»ΠΈΠ·Π°

 bool parsingAnimalChild_;    // состояниС Π°Π½Π°Π»ΠΈΠ·Π°

 XercesString currentText_;   // ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ

                              // тСкстового ΡƒΠ·Π»Π°

};

Из сравнСния ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 14.9 с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ 14.6 Π²ΠΈΠ΄Π½ΠΎ, насколько слоТным ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° структуры Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 14.6 Π½Π΅ дСлаСтся ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 14.3: здСсь, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ провСряСтся порядок слСдования Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… элСмСнтов элСмСнта ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, сущСствуСт Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ простой способ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ структуры Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° с использованиСм SАΠ₯2, ΠΊΠ°ΠΊ Π²Ρ‹ это ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°Ρ… 14.5 ΠΈ 14.6.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈ Ρ‚Π°ΠΊΠΆΠ΅

Π Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ 14.1, 14.4, 14.5 ΠΈ 14.6.

14.4. ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ XML

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

ВрСбуСтся ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ XML Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π‘++, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ элСмСнтами, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ, тСкстом, DTD, инструкциями ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ коммСнтариями

РСшСниС

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π² Xerces модСль W3C DOM. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ класс xercesc::DOMImplementationRegistry для получСния экзСмпляра xercesc::DOMImplementation, Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ DOMImplementation для создания экзСмпляра парсСра xercesc::DOMBuilder. На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ шагС зарСгистрируйтС экзСмпляр xercesc::DOMErrorHandler для получСния ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Π² Ρ…ΠΎΠ΄Π΅ Π°Π½Π°Π»ΠΈΠ·Π°, ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ парсСра parseURI(), пСрСдавая Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° URI Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° XML ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя Ρ„Π°ΠΉΠ»Π°. Если Π°Π½Π°Π»ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, ΠΌΠ΅Ρ‚ΠΎΠ΄ parseURI Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ DOMDocument, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ XML. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² спСцификации W3C DOM для просмотра ΠΈ манипулирования Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅, получая DOMWriter ΠΈΠ· DOMImplementation ΠΈ вызывая Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ writeNode() с ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ указатСля Π½Π° DOMDocument Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 14.10 ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ DOM для синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° animals.xml, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 14.1, Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΉΡ‚ΠΈ ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΡƒΠ·Π΅Π», относящийся ΠΊ слону Herby, ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 14.10. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ DOM для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Π·Π°Ρ‚Π΅ΠΌ сохранСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° XML

#include <exception>

#include <iostream> // cout

#include <xercesc/dom/DOM.hpp>

#include <xercesc/framework/LocalFileFomatTarget.hpp>

#include <xercesc/sax/SAXException.hpp>

#include <xercesc/util/PlatformUtils.hpp>

#include "animal.hpp"

#include "xerces_strings.hpp"


using namespace std;

using namespace xercesc;


/*

 * ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ XercesInitializer, ΠΊΠ°ΠΊ это сдСлано Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 14.8

 */


// Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° RAII, которая освобоТдаСт рСсурс ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· области видимости.

template<typename T>

class DOMPtr {

public:

 DOMPtr(T* t) : t_(t) {}

 ~DOMPtr() { t_->release(); }

 T* operator->() const { return t_; }

private:

 // Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ присваиваниС

 DOMPtr(const DOMPtr&);

 DOMPtr& operator=(const DOMPtr&);

 T* t_;

};


// Π‘ΠΎΠΎΠ±Ρ‰Π°Π΅Ρ‚ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Π² Ρ…ΠΎΠ΄Π΅ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° с

// использованиСм DOMBuilder.

class CircusErrorHandler : public DOMErrorHandler {

public:

 bool handleFrror(const DOMError& e) {

  std::cout << toNative(e.getMessage()) << "\n";

  return false;

 }

};


// Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта "name", Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ элСмСнту

// "animal".

const XMLCh* getAnimalName(const DOMElement* animal) {

 static XercesString name = fromNative("name");

 // ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° animal

 DOMNodeList* children = animal->getChildNodes();

 for (size_t i = 0, len = children->getLength(); i < Len; ++i) {

  DOMNode* child = children->item(i);

  if (child->getNodeType() == DOMNode::ELEMENT_NODE &&

   static_cast<DOMElement*>(child)->getTagName() == name) {

   // ΠœΡ‹ нашли элСмСнт "name".

   return child->getTextContent();

  }

 }

 return 0;

}


int main() {

 try {

  // Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Xerces ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ DOMImplementation;

  // ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ трСбуСтся функция Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ сохранСния (Load and

  // Save - LS)

  XercesInitializer init;

  DOMImplementation* impl =

   DOMImplementationRegistry::getDOMImplementation(fromNative("LS").c_str()

  );

  if (impl == 0) {

   cout << "couldn't create DOM implementation\n";