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