Spec-Zone.ru › Qt 5.9

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

[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/qt-5.9/qxmlsimplereader.html

Spec-Zone.ru

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