как получить текст в теге XML в синтаксический анализ саксофона

Я использую Xerces 3 в моей программе C ++.
Я хотел бы, чтобы кто-то помог мне, как извлечь текст между начальным и конечным тегом в синтаксическом анализе.
например, предположим, что мы имеем:

<?xml version="1.0"?>
<catalog>
<book id="123">
<author>Introduction to algorithm </author>
</book>
</catalog>

как получить доступ к этому тексту: «Введение в алгоритм»

3

Решение

Если я правильно помню, вы пишете свой собственный обработчик, наследующий от 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
);

Найди отличие? Сделайте так, чтобы подпись вашей версии совпадала с заголовочным файлом, это будет работать.

1

Другие решения

Вы должны быть в состоянии использовать:

void HandlerBase::characters    (   const XMLCh *const      chars,
const XMLSize_t     length
)

Просто знайте, что это может быть вызвано много раз.

2

Используйте ключевое слово override в ваших методах. Это может помочь вам немного

-1
По вопросам рекламы [email protected]