Spec-Zone.ru › Qt 5.14

Класс 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API