QXmlSimpleReader Class
QXmlSimpleReader 类提供了一个简单 XML 解析器的实现。更多
Header: | #include <QXmlSimpleReader> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core5Compat) 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()
信号连接到network reply 槽,并在此处理输入的数据。请参见QNetworkAccessManager 。
解析行为的某些方面可通过setFeature() 和setProperty() 进行调整。
xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
QXmlSimpleReader 不是可重入的。如果要在线程代码中使用该类,请使用锁定机制(如QMutex )锁定使用 QXmlSimpleReader 的代码。
请注意,该类现已废弃,请使用QXmlStreamReader 或 QDomDocument 来读取 XML 文件。
成员函数文档
QXmlSimpleReader::QXmlSimpleReader()
构造一个简单的 XML 阅读器。
[virtual noexcept]
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(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() 常量。
另请参见 setLexicalHandler().
[override virtual]
bool QXmlSimpleReader::parse(const QXmlInputSource &input)
重实现:QXmlReader::parse(const QXmlInputSource &input).
[override virtual]
bool QXmlSimpleReader::parse(const QXmlInputSource *input)
重实现:QXmlReader::parse(const QXmlInputSource *input)。
从input 读取 XML 文档,并一次性(非递增)进行解析。如果解析成功,则返回true
;否则返回false
。
[virtual]
bool QXmlSimpleReader::parse(const QXmlInputSource *input, bool incremental)
从input 读取 XML 文档并进行解析。如果解析成功,则返回true
;否则返回false
,表示出现错误。
如果incremental 为 false,则在 XML 文件未完全读取的情况下,此函数将返回 false。在这种情况下,解析将无法继续。
如果incremental 为 true,解析器在到达 XML 文件末尾之前到达input 的末尾,则不会返回 false。相反,它会存储解析器的状态,以便以后有更多数据时可以继续解析。在这种情况下,您可以使用函数parseContinue() 继续解析。该类存储了一个指向输入源input 的指针,而parseContinue() 函数会尝试从该输入源读取数据。因此,在不再需要调用parseContinue() 之前,不应删除输入源input 。
如果在进行增量解析时调用incremental 并将其设置为 "true",则将启动一个新的解析会话,而之前的会话将丢失。
另请参阅 parseContinue() 和QTcpSocket 。
[virtual]
bool QXmlSimpleReader::parseContinue()
继续增量解析,从最近一次调用parse() 时指定的QXmlInputSource 中获取输入。要使用此函数,必须调用parse() 并将增量参数设置为 true。
如果出现解析错误,则返回false
;否则,即使 XML 文件尚未结束,也会返回true
。您可以在以后有更多数据可解析时再次调用此函数来继续解析。
在输入源中没有可用数据时调用该函数,将向阅读器表明已到达 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)。
如果enable 为 true,则打开功能name ;否则关闭。
name 参数必须是以下字符串之一:
功能 | 默认值 | 注释 |
---|---|---|
http://xml.org/sax/features/namespaces | true | 如果启用,将向内容处理程序报告命名空间。 |
http://xml.org/sax/features/namespace-prefixes | 假 | 如果启用,则会报告命名空间声明中使用的原始前缀名称和属性。 |
http://qt-project.org/xml/features/report-whitespace-only-CharData | true | 如果启用,则使用QXmlContentHandler::characters() 报告仅包含空白字符的 CharData。如果禁用,则会默默丢弃空白字符。 |
http://qt-project.org/xml/features/report-start-end-entity | 假 | 如果启用,解析器会报告 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().
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.