Класс 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 override |
| virtual QXmlContentHandler * | contentHandler() const override |
| virtual QXmlDeclHandler * | declHandler() const override |
| virtual QXmlEntityResolver * | entityResolver() const override |
| virtual QXmlErrorHandler * | errorHandler() const override |
| virtual bool | feature(const QString &name, bool *ok = nullptr) const override |
| virtual bool | hasFeature(const QString &name) const override |
| virtual bool | hasProperty(const QString &name) const override |
| virtual QXmlLexicalHandler * | lexicalHandler() const override |
| virtual bool | parse(const QXmlInputSource &input) override |
| virtual bool | parse(const QXmlInputSource *input) override |
| virtual void * | property(const QString &name, bool *ok = nullptr) const override |
| virtual void | setContentHandler(QXmlContentHandler *handler) override |
| virtual void | setDTDHandler(QXmlDTDHandler *handler) override |
| virtual void | setDeclHandler(QXmlDeclHandler *handler) override |
| virtual void | setEntityResolver(QXmlEntityResolver *handler) override |
| virtual void | setErrorHandler(QXmlErrorHandler *handler) override |
| virtual void | setFeature(const QString &name, bool enable) override |
| virtual void | setLexicalHandler(QXmlLexicalHandler *handler) override |
| virtual void | setProperty(const QString &name, void *value) override |
Подробное описание
Этот парсер 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.
[override virtual] QXmlDTDHandler *QXmlSimpleReader::DTDHandler() const
Переопределяет: QXmlReader::DTDHandler() const.
См. также setDTDHandler().
[override virtual] QXmlContentHandler *QXmlSimpleReader::contentHandler() const
Переопределяет: QXmlReader::contentHandler() const.
См. также setContentHandler().
[override virtual] QXmlDeclHandler *QXmlSimpleReader::declHandler() const
Переопределяет: QXmlReader::declHandler() const.
См. также setDeclHandler().
[override virtual] QXmlEntityResolver *QXmlSimpleReader::entityResolver() const
Переопределяет: QXmlReader::entityResolver() const.
См. также setEntityResolver().
[override virtual] QXmlErrorHandler *QXmlSimpleReader::errorHandler() const
Переопределяет: QXmlReader::errorHandler() const.
См. также setErrorHandler().
[override virtual] bool QXmlSimpleReader::feature(const QString &name, bool *ok = nullptr) const
Переопределяет: QXmlReader::feature(const QString &name, bool *ok) const.
См. также setFeature().
[override virtual] bool QXmlSimpleReader::hasFeature(const QString &name) const
Переопределяет: QXmlReader::hasFeature(const QString &name) const.
[override virtual] bool QXmlSimpleReader::hasProperty(const QString &name) const
Переопределяет: QXmlReader::hasProperty(const QString &name) const.
[override virtual] QXmlLexicalHandler *QXmlSimpleReader::lexicalHandler() const
Переопределяет: QXmlReader::lexicalHandler() const.
См. также setLexicalHandler().
[override virtual] bool QXmlSimpleReader::parse(const QXmlInputSource &input)
Переопределяет: QXmlReader::parse(const QXmlInputSource &input).
[override 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, если XML-файл не был полностью прочитан. В этом случае парсинг невозможно продолжить.
Если incremental истинно, парсер не возвращает 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().
[override virtual] void *QXmlSimpleReader::property(const QString &name, bool *ok = nullptr) const
Переопределяет: QXmlReader::property(const QString &name, bool *ok) const.
См. также setProperty().
[override virtual] void QXmlSimpleReader::setContentHandler(QXmlContentHandler *handler)
Переопределяет: QXmlReader::setContentHandler(QXmlContentHandler *handler).
См. также contentHandler().
[override virtual] void QXmlSimpleReader::setDTDHandler(QXmlDTDHandler *handler)
Переопределяет: QXmlReader::setDTDHandler(QXmlDTDHandler *handler).
[override virtual] void QXmlSimpleReader::setDeclHandler(QXmlDeclHandler *handler)
Переопределяет: QXmlReader::setDeclHandler(QXmlDeclHandler *handler).
См. также declHandler().
[override virtual] void QXmlSimpleReader::setEntityResolver(QXmlEntityResolver *handler)
Переопределяет: QXmlReader::setEntityResolver(QXmlEntityResolver *handler).
См. также entityResolver().
[override virtual] void QXmlSimpleReader::setErrorHandler(QXmlErrorHandler *handler)
Переопределяет: QXmlReader::setErrorHandler(QXmlErrorHandler *handler).
См. также errorHandler().
[override virtual] void QXmlSimpleReader::setFeature(const QString &name, bool enable)
Переопределяет: QXmlReader::setFeature(const QString &name, bool value).
Включает функцию name, если enable истинно; в противном случае выключает.
Параметр 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.
[override virtual] void QXmlSimpleReader::setLexicalHandler(QXmlLexicalHandler *handler)
Переопределяет: QXmlReader::setLexicalHandler(QXmlLexicalHandler *handler).
См. также lexicalHandler().
[override virtual] void QXmlSimpleReader::setProperty(const QString &name, void *value)
Переопределяет: QXmlReader::setProperty(const QString &name, void *value).
См. также property().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qxmlsimplereader.html