Spec-Zone.ru › Qt 5.11

Класс 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
  • 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() сетевого ответа qnetwork reply к слоту и обработать поступающие данные там. См. 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().

См. также setDTDHandler().

[override virtual] QXmlContentHandler *QXmlSimpleReader::contentHandler() const

Переопределено из QXmlReader::contentHandler().

См. также setContentHandler().

[override virtual] QXmlDeclHandler *QXmlSimpleReader::declHandler() const

Переопределено из QXmlReader::declHandler().

См. также setDeclHandler().

[override virtual] QXmlEntityResolver *QXmlSimpleReader::entityResolver() const

Переопределено из QXmlReader::entityResolver().

См. также setEntityResolver().

[override virtual] QXmlErrorHandler *QXmlSimpleReader::errorHandler() const

Переопределено из QXmlReader::errorHandler().

См. также setErrorHandler().

[override virtual] bool QXmlSimpleReader::feature(const QString &name, bool *ok = nullptr) const

Переопределено из QXmlReader::feature().

См. также setFeature().

[override virtual] bool QXmlSimpleReader::hasFeature(const QString &name) const

Переопределено из QXmlReader::hasFeature().

[override virtual] bool QXmlSimpleReader::hasProperty(const QString &name) const

Переопределено из QXmlReader::hasProperty().

[override virtual] QXmlLexicalHandler *QXmlSimpleReader::lexicalHandler() const

Переопределено из QXmlReader::lexicalHandler().

См. также setLexicalHandler().

[override virtual] bool QXmlSimpleReader::parse(const QXmlInputSource &input)

Переопределено из QXmlReader::parse().

[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, эта функция вернёт 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().

[override virtual] void *QXmlSimpleReader::property(const QString &name, bool *ok = nullptr) const

Переопределено из QXmlReader::property().

См. также setProperty().

[override virtual] void QXmlSimpleReader::setContentHandler(QXmlContentHandler *handler)

Переопределено из QXmlReader::setContentHandler().

См. также contentHandler().

[override virtual] void QXmlSimpleReader::setDTDHandler(QXmlDTDHandler *handler)

Переопределено из QXmlReader::setDTDHandler().

[override virtual] void QXmlSimpleReader::setDeclHandler(QXmlDeclHandler *handler)

Переопределено из QXmlReader::setDeclHandler().

См. также declHandler().

[override virtual] void QXmlSimpleReader::setEntityResolver(QXmlEntityResolver *handler)

Переопределено из QXmlReader::setEntityResolver().

См. также entityResolver().

[override virtual] void QXmlSimpleReader::setErrorHandler(QXmlErrorHandler *handler)

Переопределено из QXmlReader::setErrorHandler().

См. также errorHandler().

[override 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.

[override virtual] void QXmlSimpleReader::setLexicalHandler(QXmlLexicalHandler *handler)

Переопределено из QXmlReader::setLexicalHandler().

См. также lexicalHandler().

[override 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.11/qxmlsimplereader.html

Spec-Zone.ru

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