Класс QXmlSimpleReader
Класс QXmlSimpleReader предоставляет реализацию простого парсера XML. Подробнее...
| Заголовок: | #include <QXmlSimpleReader> |
| CMake: | find_package(Qt6 COMPONENTS Core5Compat REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core5Compat) |
| qmake: | QT += core5compat |
| Наследуется от: | 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.
Обратите внимание, что этот класс теперь устарел, пожалуйста, используйте QXmlStreamReader или QDomDocument для чтения XML-файлов.
Документация по функциям-членам
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().
[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-6.2/qxmlsimplereader.html