Класс 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 |
- 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() сетевого ответа qnetwork reply к слоту и обработать поступающие данные там. См. 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().
См. также setDTDHandler().
[override virtual] QXmlContentHandler *QXmlSimpleReader::contentHandler() const
Переопределено из QXmlReader::contentHandler().
См. также setContentHandler().
[override virtual] QXmlDeclHandler *QXmlSimpleReader::declHandler() const
Переопределено из QXmlReader::declHandler().
См. также setDeclHandler().
[override virtual] QXmlEntityResolver *QXmlSimpleReader::entityResolver() const
Переопределено из QXmlReader::entityResolver().
См. также setEntityResolver().
[override virtual] QXmlErrorHandler *QXmlSimpleReader::errorHandler() const
Переопределено из QXmlReader::errorHandler().
См. также setErrorHandler().
[override virtual] bool QXmlSimpleReader::feature(const QString &name, bool *ok = nullptr) const
Переопределено из QXmlReader::feature().
См. также setFeature().
[override virtual] bool QXmlSimpleReader::hasFeature(const QString &name) const
Переопределено из QXmlReader::hasFeature().
[override virtual] bool QXmlSimpleReader::hasProperty(const QString &name) const
Переопределено из QXmlReader::hasProperty().
[override virtual] QXmlLexicalHandler *QXmlSimpleReader::lexicalHandler() const
Переопределено из QXmlReader::lexicalHandler().
См. также setLexicalHandler().
[override virtual] bool QXmlSimpleReader::parse(const QXmlInputSource &input)
Переопределено из QXmlReader::parse().
[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, эта функция вернёт 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().
[override virtual] void *QXmlSimpleReader::property(const QString &name, bool *ok = nullptr) const
Переопределено из QXmlReader::property().
См. также setProperty().
[override virtual] void QXmlSimpleReader::setContentHandler(QXmlContentHandler *handler)
Переопределено из QXmlReader::setContentHandler().
См. также contentHandler().
[override virtual] void QXmlSimpleReader::setDTDHandler(QXmlDTDHandler *handler)
Переопределено из QXmlReader::setDTDHandler().
[override virtual] void QXmlSimpleReader::setDeclHandler(QXmlDeclHandler *handler)
Переопределено из QXmlReader::setDeclHandler().
См. также declHandler().
[override virtual] void QXmlSimpleReader::setEntityResolver(QXmlEntityResolver *handler)
Переопределено из QXmlReader::setEntityResolver().
См. также entityResolver().
[override virtual] void QXmlSimpleReader::setErrorHandler(QXmlErrorHandler *handler)
Переопределено из QXmlReader::setErrorHandler().
См. также errorHandler().
[override 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.
[override virtual] void QXmlSimpleReader::setLexicalHandler(QXmlLexicalHandler *handler)
Переопределено из QXmlReader::setLexicalHandler().
См. также lexicalHandler().
[override 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/archives/qt-5.11/qxmlsimplereader.html