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";
return EXIT_FAILURE;
}
// Сконструировать DOMBuilder для анализа документа animals.xml.
DOMPtr
static_cast
createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, 0);
// Подключить пространства имен (они не требуются в этом примере)
parser->setFeature(XMLUni::fgDOMNamespaces, true);
// Зарегистрировать обработчик ошибок
CircusErrorHandler err;
parser->setErrorHandler(&err);
// Выполнить синтаксический анализ animals.xml; здесь можно
// использовать URL вместо имени файла
DOMDocument* doc =
parser->parseURI("animals.xml");
// Найти элемент слона Herby: сначала получить указатель на элемент
// "animalList".
DOMElement* animalList = doc->getDocumentElement();
if (animalList->getTagName() != fromNative("animalList")) {
cout << "bad document root: "
<< toNative(animalist->getTagName()) << "\n";
return EXIT_FAILURE;
}
// Затем просматривать элементы "animal", пытаясь найти элемент слона
// Herby.
DOMNodeList* animals =
animaIList->getElementsByTagName(fromNative("animal").c_str());
for (size_t i = 0,
len = animals->getLength(); i < len; ++i) {
DOMElement* animal =
static_cast
const XMLCh* name = getAnimalName(animal);
if (name != 0 && name == fromNative("Herby")) {
// Herby найден - удалить его из документа.
animalList->removeChild(animal);
animal->release();
// необязательный оператор.
break;
}
}
// Сконструировать DOMWriter для сохранения animals.xml.
DOMPtr
static cast
writer->setErrorHandler(&err);
// Сохранить animals.xml.
LocalFileFormatTarget file("animals.xml");
writer->writeNode(&file, *animalList);
} catch (const SAXException& e) {
cout << "xml error: " << toNative(e.getMessage()) << "\n";
return EXIT_FAILURE;
} catch (const DOMException& e) {
cout << "xml error: " << toNative(e.getMessage()) << "\n";
return EXIT_FAILURE;
} catch (const exception& e) {
cout << e.what() << "\n";
return EXIT_FAILURE;
}
}