DOMImplementation::createXXX(), путем вызова метода release(). Используйте утилиту DOMPtr из примера 14.10 для того, чтобы гарантировать освобождение такого указателя, даже если выбрасывается исключение. Необязательно явно удалять указатели, возвращаемые методами, имена которых имеют вид DOMDocument::createXXX(), хотя это можно делать, если они больше не нужны. Дополнительные сведения вы найдете в документации Xerces.
14.5. Проверка документа XML на соответствие определению DTD
Требуется проверить документ XML на соответствие DTD.
Используйте библиотеку Xerces с парсером SAX2 (простой программный XML-интерфейс) или с парсером DOM.
Для проверки документа XML при использовании SAX2 получите SAX2XMLReader, как показано в примере 14.8. Затем включите режим проверки DTD, вызывая метод парсера setFeature() с аргументами xercesc::XMLUni::fgSAX2CoreValidation и true. Наконец, зарегистрируйте обработчик ErrorHandler для получения уведомлений о нарушении DTD и вызовите метод парсера parse(), указывая в качестве его аргумента имя вашего документа XML.
Для проверки документа XML при использовании парсера DOM сначала сконструируйте экземпляр XercesDOMParser. Затем включите режим проверки DTD, вызывая метод парсера setValidationScheme() с аргументом xercesc::XercesDOMParser::Val_Always. Наконец, зарегистрируйте обработчик ErrorHandler для получения уведомлений о нарушении DTD и вызовите метод парсера parse(), указывая в качестве его аргумента имя вашего документа XML.
XercesDOMParser, т.е. XML-парсер, который входил в состав Xerces еще до того, как был разработан интерфейс DOMBuilder XercesDOMParser позволяет немного упростить пример, но при желании вы можете вместо него использовать DOMBuilder. См. обсуждение этого рецепта и рецепт 14.4.
Для примера предположим, что вы модифицируете документ XML
veterinarian, trainer) >
name CDATA #REQUIRED
phone CDATA #REQUIRED
>
name CDATA #REQUIRED
phone CDATA #REQUIRED
>
/*
* Операторы #include из примера 14.8, кроме включения вектора
здесь не нужен
*/
#include
#include
using namespace std;
using namespace xercesc;
/*
* Определить XercesInitializer, как это сделано в примере 14.8, и
* CircusErrorHandler, как это сделано в примере 14.7
*/
int main() {
try {
// Инициализировать Xerces и получить парсер
SAX2 XercesInitializer init;
auto_ptr
parser(XMLReaderFactory::createXMLReader());
// Включить режим проверки