Класс QXmlSimpleReader
Класс QXmlSimpleReader предоставляет реализацию простого парсера XML. Подробнее...
| Заголовок: | #include <QXmlSimpleReader> |
| qmake: | QT += xml |
| Наследует: | QXmlReader |
Предупреждение: Этот класс не реентерабелен.
Открытые функции
| QXmlSimpleReader() | |
| virtual | ~QXmlSimpleReader() |
| virtual bool | parse(const QXmlInputSource *input, bool incremental) |
| virtual bool | parseContinue() |
Переопределённые открытые функции
| virtual QXmlDTDHandler * | DTDHandler() const |
| virtual QXmlContentHandler * | contentHandler() const |
| virtual QXmlDeclHandler * | declHandler() const |
| virtual QXmlEntityResolver * | entityResolver() const |
| virtual QXmlErrorHandler * | errorHandler() const |
| virtual bool | feature(const QString &name, bool *ok = Q_NULLPTR) const |
| virtual bool | hasFeature(const QString &name) const |
| virtual bool | hasProperty(const QString &name) const |
| virtual QXmlLexicalHandler * | lexicalHandler() const |
| virtual bool | parse(const QXmlInputSource &input) |
| virtual bool | parse(const QXmlInputSource *input) |
| virtual void * | property(const QString &name, bool *ok = Q_NULLPTR) const |
| virtual void | setContentHandler(QXmlContentHandler *handler) |
| virtual void | setDTDHandler(QXmlDTDHandler *handler) |
| virtual void | setDeclHandler(QXmlDeclHandler *handler) |
| virtual void | setEntityResolver(QXmlEntityResolver *handler) |
| virtual void | setErrorHandler(QXmlErrorHandler *handler) |
| virtual void | setFeature(const QString &name, bool enable) |
| virtual void | setLexicalHandler(QXmlLexicalHandler *handler) |
| virtual void | setProperty(const QString &name, void *value) |
- 19 открытых функций унаследовано от QXmlReader
Подробное описание
Класс QXmlSimpleReader предоставляет реализацию простого парсера XML.
Этот XML-читатель подходит для широкого спектра приложений. Он может парсить хорошо сформированный XML и сообщать обработчику содержимого имена пространств имён элементов; однако он не парсит внешние сущности. По историческим причинам, нормализация значений атрибутов и обработка конца строки, как описано в спецификации XML 1.0, не выполняется.
Самый простой способ использования этого класса — создание экземпляра читателя, определение источника входных данных, указание обработчиков, используемых читателем, и парсинг данных.
Например, мы можем использовать QFile для обеспечения входных данных. Здесь мы создаём читатель и определяем источник входных данных, который будет использоваться читателем:
QXmlSimpleReader xmlReader;
QXmlInputSource *source = new QXmlInputSource(file); Обработчик позволяет нам выполнять действия, когда читатель встречает определённые типы содержимого или если в входных данных обнаружены ошибки. Читатель должен быть проинформирован о том, какой обработчик использовать для каждого типа события. Для многих распространённых приложений мы можем создать пользовательский обработчик, унаследовав от QXmlDefaultHandler, и использовать его для обработки как событий об ошибках, так и событий содержимого:
Handler *handler = new Handler;
xmlReader.setContentHandler(handler);
xmlReader.setErrorHandler(handler); Если вы не зададите хотя бы обработчики содержимого и ошибок, парсер вернётся к своему поведению по умолчанию — и ничего не сделает.
Самый удобный способ обработки входных данных — чтение их за один проход с помощью функции parse() с аргументом, определяющим источник входных данных:
bool ok = xmlReader.parse(source);
if (!ok)
std::cout << "Parsing failed." << std::endl; Если вы не можете разобрать все входные данные за один раз (например, они очень большие или поступают по сетевому соединению), данные могут быть переданы парсеру частями. Это достигается путём указания parse() работать инкрементально и совершением последующих вызовов функции parseContinue(), пока все данные не будут обработаны.
Распространённый способ выполнения инкрементного парсинга — подключение сигнала readyRead() из ответа сети к слоту и обработка поступающих данных там. Смотрите QNetworkAccessManager.
Аспекты поведения парсинга могут быть адаптированы с помощью функций setFeature() и setProperty().
xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", true); Класс QXmlSimpleReader не реентерабелен. Если вы хотите использовать класс в потоковой обработке, заблокируйте код, используя QXmlSimpleReader с механизмом блокировки, например, QMutex.
Документация по функциям-членам
QXmlSimpleReader::QXmlSimpleReader()
Конструирует простой XML-читатель.
[virtual] QXmlSimpleReader::~QXmlSimpleReader()
Уничтожает простой XML-читатель.
[virtual] QXmlDTDHandler *QXmlSimpleReader::DTDHandler() const
Переопределено из QXmlReader::DTDHandler().
См. также setDTDHandler().
[virtual] QXmlContentHandler *QXmlSimpleReader::contentHandler() const
Переопределено из QXmlReader::contentHandler().
См. также setContentHandler().
[virtual] QXmlDeclHandler *QXmlSimpleReader::declHandler() const
Переопределено из QXmlReader::declHandler().
См. также setDeclHandler().
[virtual] QXmlEntityResolver *QXmlSimpleReader::entityResolver() const
Переопределено из QXmlReader::entityResolver().
См. также setEntityResolver().
[virtual] QXmlErrorHandler *QXmlSimpleReader::errorHandler() const
Переопределено из QXmlReader::errorHandler().
См. также setErrorHandler().
[virtual] bool QXmlSimpleReader::feature(const QString &name, bool *ok = Q_NULLPTR) const
Переопределено из QXmlReader::feature().
См. также setFeature().
END_OF_DOCUMENT_MARKER
[virtual] bool QXmlSimpleReader::hasFeature(const QString &name) const
Переопределено из QXmlReader::hasFeature().
[virtual] bool QXmlSimpleReader::hasProperty(const QString &name) const
Переопределено из QXmlReader::hasProperty().
[virtual] QXmlLexicalHandler *QXmlSimpleReader::lexicalHandler() const
Переопределено из QXmlReader::lexicalHandler().
См. также setLexicalHandler().
[virtual] bool QXmlSimpleReader::parse(const QXmlInputSource &input)
Переопределено из QXmlReader::parse().
[virtual] bool QXmlSimpleReader::parse(const QXmlInputSource *input)
Читает XML-документ из input и анализирует его за один проход (не инкрементально). Возвращает true при успешном анализе; в противном случае возвращает false.
[virtual] bool QXmlSimpleReader::parse(const QXmlInputSource *input, bool incremental)
Читает XML-документ из input и анализирует его. Возвращает true при успешном завершении анализа; в противном случае возвращает false, указывая на ошибку.
Если incremental имеет значение false, эта функция вернёт false, если XML-файл не был полностью прочитан. В этом случае продолжить анализ не получится.
Если incremental имеет значение true, анализатор не возвращает false, если он достиг конца input до конца XML-файла. Вместо этого он сохраняет состояние анализатора, чтобы продолжить анализ позже, когда доступны дополнительные данные. В таком случае вы можете использовать функцию parseContinue() для продолжения анализа. Этот класс хранит указатель на исходный источник input, и функция parseContinue() пытается прочитать данные из этого исходного источника. Поэтому вы не должны удалять исходный источник input, пока вам больше не нужно вызывать parseContinue().
Если эта функция вызывается с incremental, установленным в true, в то время как инкрементальный анализ уже идёт, будет начата новая сессия анализа, и предыдущая сессия будет потеряна.
См. также parseContinue() и QTcpSocket.
[virtual] bool QXmlSimpleReader::parseContinue()
Продолжает инкрементальный анализ, используя данные из QXmlInputSource, указанного в последнем вызове parse(). Для использования этой функции вы обязательно должны были вызвать parse() с аргументом incremental, установленным в true.
Возвращает false в случае ошибки анализа; в противном случае возвращает true, даже если конец XML-файла ещё не достигнут. Вы можете продолжить анализ на более позднем этапе, снова вызвав эту функцию, когда появятся новые данные для анализа.
Вызов этой функции, когда в исходном источнике нет данных, указывает анализатору на достижение конца XML-файла. Если предоставленные до этого данные были некорректными, возникает ошибка анализа, и возвращается false. Если предоставленные данные были корректными, возвращается true. Важно завершать ввод таким образом, так как это позволяет повторно использовать анализатор для анализа других XML-файлов.
Вызов этой функции после достижения конца файла, но без доступных данных, приведёт к возвращению false независимо от того, был ли предыдущий ввод корректным или нет.
См. также parse(), QXmlInputSource::data(), и QXmlInputSource::next().
[virtual] void *QXmlSimpleReader::property(const QString &name, bool *ok = Q_NULLPTR) const
Переопределено из QXmlReader::property().
См. также setProperty().
[virtual] void QXmlSimpleReader::setContentHandler(QXmlContentHandler *handler)
Переопределено из QXmlReader::setContentHandler().
См. также contentHandler().
[virtual] void QXmlSimpleReader::setDTDHandler(QXmlDTDHandler *handler)
Переопределено из QXmlReader::setDTDHandler().
[virtual] void QXmlSimpleReader::setDeclHandler(QXmlDeclHandler *handler)
Переопределено из QXmlReader::setDeclHandler().
См. также declHandler().
[virtual] void QXmlSimpleReader::setEntityResolver(QXmlEntityResolver *handler)
Переопределено из QXmlReader::setEntityResolver().
См. также entityResolver().
[virtual] void QXmlSimpleReader::setErrorHandler(QXmlErrorHandler *handler)
Переопределено из QXmlReader::setErrorHandler().
См. также errorHandler().
[virtual] void QXmlSimpleReader::setFeature(const QString &name, bool enable)
Переопределено из QXmlReader::setFeature().
Включает функцию name, если enable имеет значение true; в противном случае выключает её.
Параметр name должен быть одной из следующих строк:
| Функция | По умолчанию | Примечания |
|---|---|---|
| http://xml.org/sax/features/namespaces | true | Если включено, обработчик событий сообщает о пространствах имён. |
| http://xml.org/sax/features/namespace-prefixes | false | Если включено, используются исходные префиксные имена и атрибуты, используемые для деклараций пространств имён. |
| http://qt-project.org/xml/features/report-whitespace-only-CharData | true | Если включено, CharData, состоящие только из пробельных символов, сообщаются с помощью QXmlContentHandler::characters(). Если отключено, пробелы игнорируются. |
| http://qt-project.org/xml/features/report-start-end-entity | false | Если включено, анализатор сообщает об событиях QXmlContentHandler::startEntity() и QXmlContentHandler::endEntity(), поэтому данные символов могут сообщаться частями. Если отключено, анализатор не сообщает об этих событиях, но молча подставляет сущности и сообщает данные символов в одном блоке. |
См. также feature(), hasFeature() и SAX2 Features.
[virtual] void QXmlSimpleReader::setLexicalHandler(QXmlLexicalHandler *handler)
Переопределено из QXmlReader::setLexicalHandler().
См. также lexicalHandler().
[virtual] void QXmlSimpleReader::setProperty(const QString &name, void *value)
Переопределено из QXmlReader::setProperty().
См. также property().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qxmlsimplereader.html