Класс 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 |
Подробное описание
Этот 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-ридера.
[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() и SAX2 Features.
[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-5.13/qxmlsimplereader.html