QXmlSimpleReader 类
QXmlSimpleReader 类提供了一个简单 XML 解析器的实现。 更多...
头文件 | #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()
信号连接到一个槽,并在那里处理传入的数据。请参阅QNetworkAccessManager。
可以使用setFeature() 和 setProperty() 来调整解析行为的某些方面。
xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
QXmlSimpleReader不是可重入的。如果您想在线程代码中使用该类,请使用像QMutex这样的锁定机制锁定代码。
请注意,此类现已弃用,请使用QXmlStreamReader或QDomDocument读取XML文件。
成员函数文档
QXmlSimpleReader::QXmlSimpleReader()
构建一个简单的XML读取器。
[虚函数 noexcept]
QXmlSimpleReader::~QXmlSimpleReader()
销毁简单的XML读取器。
[覆盖虚函数]
QXmlDTDHandler *QXmlSimpleReader::DTDHandler() const
重写: QXmlReader::DTDHandler() const.
另请参阅 setDTDHandler.
[覆盖虚函数]
QXmlContentHandler *QXmlSimpleReader::contentHandler() const
重写: QXmlReader::contentHandler() const.
另请参阅 setContentHandler.
[重写虚函数]
QXmlDeclHandler *QXmlSimpleReader::declHandler() const
重新实现:QXmlReader::declHandler() const.
另请参阅setDeclHandler().
[重写虚函数]
QXmlEntityResolver *QXmlSimpleReader::entityResolver() const
重新实现:QXmlReader::entityResolver() const.
另请参阅setEntityResolver().
[重写虚函数]
QXmlErrorHandler *QXmlSimpleReader::errorHandler() const
重新实现:QXmlReader::errorHandler() const.
另请参阅setErrorHandler().
[重写虚函数]
bool QXmlSimpleReader::feature(const QString &name, bool *ok = nullptr) const
重新实现:QXmlReader::feature(const QString &name, bool *ok) const.
另请参阅setFeature().
[重写虚函数]
bool QXmlSimpleReader::hasFeature(const QString &name) const
重新实现:QXmlReader::hasFeature(const QString &name) const.
[重写虚函数]
bool QXmlSimpleReader::hasProperty(const QString &name) const
重新实现:QXmlReader::hasProperty(const QString &name) const.
[重写虚函数]
QXmlLexicalHandler *QXmlSimpleReader::lexicalHandler() const
重新实现:QXmlReader::lexicalHandler() const.
另请参阅setLexicalHandler().
[重写虚函数]
bool QXmlSimpleReader::parse(const QXmlInputSource &input)
重新实现:QXmlReader::parse(const QXmlInputSource &input).
[重写虚函数]
bool QXmlSimpleReader::parse(const QXmlInputSource *input)
重新实现:QXmlReader::parse(const QXmlInputSource *input).
从input读取XML文档,并一次性解析它(非增量)。如果解析成功,则返回true;否则返回false。
[虚函数]
bool QXmlSimpleReader::parse(const QXmlInputSource *input, bool incremental)
从input读取XML文档并解析它。如果解析成功完成,则返回true;否则返回false,表示发生错误。
如果incremental为false,则如果在读取XML文件时未完全读取,此函数将返回false。在这种情况下,无法继续解析。
如果增量为真,解析器在达到XML文件的末尾之前先到达输入的末尾时,不会返回false。相反,它会存储解析器的状态,以便在更多数据可用时稍后继续解析。在这种情况下,您可以使用函数 parseContinue() 来继续解析。此类存储了对输入源input的指针,并且parseContinue() 函数尝试从该输入源读取。因此,您在不再需要调用 parseContinue() 之前不应删除输入源input。
如果在增量解析正在进行时,该函数调用带有增量设置为true,将开始一个新解析会话,且之前会话将丢失。
另请参阅 parseContinue() 和 QTcpSocket。
[虚拟]
bool QXmlSimpleReader::parseContinue()
继续增量解析,从最新调用 parse() 时指定的 QXmlInputSource 中获取输入。要使用此函数,您必须曾使用增量参数为true的 parse()。
如果发生解析错误,则返回 false
;否则返回 true
,即使未到达XML文件的末尾。在解析更多数据时,您可以通过再次调用该函数来在稍后继续解析。
调用此函数而没有输入源的数据,会向读取器指示已达到XML文件的末尾。如果直到这一点的输入不是良好形成的,将发生解析错误,并返回false。如果输入是良好形成的,则返回true。以这种方式结束输入很重要,因为它允许您重用读取器来解析其他XML文件。
在达到文件末尾但无数据可用的情况下调用此函数,无论之前的输入是否良好形成,都返回false。
另请参阅 parse()、QXmlInputSource::data 和 QXmlInputSource::next。
[覆盖虚拟]
void *QXmlSimpleReader::property(const QString &name, bool *ok = nullptr) const
重新实现: QXmlReader::property(const QString &name, bool *ok) const.
另请参阅 setProperty。
[覆盖虚拟]
void QXmlSimpleReader::setContentHandler(QXmlContentHandler *handler)
重新实现: QXmlReader::setContentHandler(QXmlContentHandler *handler).
另请参阅 contentHandler。
[覆盖虚拟]
void QXmlSimpleReader::setDTDHandler(QXmlDTDHandler *handler)
重新实现: QXmlReader::setDTDHandler(QXmlDTDHandler *handler).
[重载虚函数]
void QXmlSimpleReader::setDeclHandler(QXmlDeclHandler *handler)
重实现: QXmlReader::setDeclHandler(QXmlDeclHandler *handler).
另请参阅declHandler().
[重载虚函数]
void QXmlSimpleReader::setEntityResolver(QXmlEntityResolver *handler)
重实现: QXmlReader::setEntityResolver(QXmlEntityResolver *handler).
另请参阅entityResolver().
[重载虚函数]
void QXmlSimpleReader::setErrorHandler(QXmlErrorHandler *handler)
重实现: QXmlReader::setErrorHandler(QXmlErrorHandler *handler).
另请参阅errorHandler().
[重载虚函数]
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 | 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().
[重载虚函数]
void QXmlSimpleReader::setLexicalHandler(QXmlLexicalHandler *handler)
重实现: QXmlReader::setLexicalHandler(QXmlLexicalHandler *handler).
另请参阅lexicalHandler().
[重载虚函数]
void QXmlSimpleReader::setProperty(const QString &name, void *value)
重实现: QXmlReader::setProperty(const QString &name, void *value).
另请参阅property().
© 2024 Qt公司有限,公司提供的文档贡献均为各自所有者的版权。本提供的文档受自由软件基金会发布的GNU自由文档许可版1.3的条款所许可。Qt及其相应的标志是芬兰和/或其他国家的Qt公司有限的公司和/或商标。所有其他商标均属于各自的拥有者。