Класс 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 равно 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().
[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.0/qxmlsimplereader.html