Я использую Xerces 3 в моей программе C ++.
Я хотел бы, чтобы кто-то помог мне, как извлечь текст между начальным и конечным тегом в синтаксическом анализе.
например, предположим, что мы имеем:
<?xml version="1.0"?>
<catalog>
<book id="123">
<author>Introduction to algorithm </author>
</book>
</catalog>
как получить доступ к этому тексту: «Введение в алгоритм»
Если я правильно помню, вы пишете свой собственный обработчик, наследующий от HandlerBase
, startElement()
будет вызван в <author>
а потом endElement()
будет вызван в </author>
, Весь промежуточный текст будет передан characters()
так что вам нужно знать, когда вы внутри <author></author>
и использовать это, чтобы сохранить символы в полезное место внутри вашего characters()
функция: http://xerces.apache.org/xerces-c/apiDocs-3/classHandlerBase.html
Когда я сделал это (некоторое время назад), я просто обманул и имел все как атрибуты, которые передаются startElement()
и экономит много хлопот.
РЕДАКТИРОВАТЬ: я сделал свой собственный пример и у меня была та же проблема (которую вы не очень хорошо описали в вопросе, и было бы проще разобраться, если бы вы предоставили свой код, кстати).
Посмотрите на документация (обратите внимание, я не был осторожен при проверке какой версии, но все же):
virtual void characters (const XMLCh *const chars, const XMLSize_t length)
Затем проверьте фактический заголовочный файл.
virtual void characters
(
const XMLCh* const chars
, const unsigned int length
);
Найди отличие? Сделайте так, чтобы подпись вашей версии совпадала с заголовочным файлом, это будет работать.
Вы должны быть в состоянии использовать:
void HandlerBase::characters ( const XMLCh *const chars,
const XMLSize_t length
)
Просто знайте, что это может быть вызвано много раз.
Используйте ключевое слово override в ваших методах. Это может помочь вам немного