Класс 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() ответа сети к слоту и обработка поступающих данных в нём. См. 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, если 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().
См. также 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 истинно; в противном случае выключает её.
Параметр 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.
[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/qt-5.12/qxmlsimplereader.html