QXmlDefaultHandler Class
QXmlDefaultHandler 类提供了所有 XML 处理器类的默认实现。更多
Header: | #include <QXmlDefaultHandler> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core5Compat) target_link_libraries(mytarget PRIVATE Qt6::Core5Compat) |
qmake: | QT += core5compat |
继承: | QXmlContentHandler,QXmlErrorHandler,QXmlDTDHandler,QXmlEntityResolver,QXmlLexicalHandler, 和QXmlDeclHandler |
注:该类中的所有函数都是可重入的。
公共函数
QXmlDefaultHandler() | |
virtual | ~QXmlDefaultHandler() |
重实现的公共函数
virtual bool | attributeDecl(const QString &eName, const QString &aName, const QString &type, const QString &valueDefault, const QString &value) override |
virtual bool | characters(const QString &ch) override |
virtual bool | comment(const QString &ch) override |
virtual bool | endCDATA() override |
virtual bool | endDTD() override |
virtual bool | endDocument() override |
virtual bool | endElement(const QString &namespaceURI, const QString &localName, const QString &qName) override |
virtual bool | endEntity(const QString &name) override |
virtual bool | endPrefixMapping(const QString &prefix) override |
virtual bool | error(const QXmlParseException &exception) override |
virtual QString | errorString() const override |
virtual bool | externalEntityDecl(const QString &name, const QString &publicId, const QString &systemId) override |
virtual bool | fatalError(const QXmlParseException &exception) override |
virtual bool | ignorableWhitespace(const QString &ch) override |
virtual bool | internalEntityDecl(const QString &name, const QString &value) override |
virtual bool | notationDecl(const QString &name, const QString &publicId, const QString &systemId) override |
virtual bool | processingInstruction(const QString &target, const QString &data) override |
virtual bool | resolveEntity(const QString &publicId, const QString &systemId, QXmlInputSource *&ret) override |
virtual void | setDocumentLocator(QXmlLocator *locator) override |
virtual bool | skippedEntity(const QString &name) override |
virtual bool | startCDATA() override |
virtual bool | startDTD(const QString &name, const QString &publicId, const QString &systemId) override |
virtual bool | startDocument() override |
virtual bool | startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts) override |
virtual bool | startEntity(const QString &name) override |
virtual bool | startPrefixMapping(const QString &prefix, const QString &uri) override |
virtual bool | unparsedEntityDecl(const QString &name, const QString &publicId, const QString &systemId, const QString ¬ationName) override |
virtual bool | warning(const QXmlParseException &exception) override |
详细说明
该类集合了专门处理程序类的功能,使其成为为QXmlReader 的子类(尤其是QXmlSimpleReader )实现自定义处理程序的便捷起点。该类重新实现了每个基类的虚拟函数,为许多常见情况提供了合理的默认行为。通过子类化该类并覆盖这些函数,您就可以专注于实现与您的应用程序相关的处理程序部分。
在解析过程中,必须告诉 XML 阅读器对不同类型的事件使用哪种处理程序。这意味着,尽管 QXmlDefaultHandler 提供了从其所有基类继承的函数的默认实现,但我们仍然可以针对特定类型的事件使用专门的处理程序。
例如,QXmlDefaultHandler 子类化了QXmlContentHandler 和QXmlErrorHandler ,因此通过子类化它,我们可以为以下两个阅读器函数使用相同的处理程序:
xmlReader.setContentHandler(handler); xmlReader.setErrorHandler(handler);
由于阅读器会通知处理程序解析错误,因此,如果我们想在出现错误时停止解析,就有必要重新实现QXmlErrorHandler::fatalError() :
boolHandler::fatalError(constQXmlParseException异常){ qWarning() << "Fatal error on line" << exception.lineNumber() << ", column"<<exception.columnNumber()<< ':'<<exception.message();return false; }
上述函数返回false
,告诉阅读器停止解析。要继续使用同一个阅读器,必须创建一个新的处理程序实例,并按照上述方式设置阅读器使用它。
研究一下 QXmlDefaultHandler 继承的一些函数,并考虑一下为什么要在自定义处理程序中重新实现这些函数,是非常有用的。自定义处理程序通常会重新实现QXmlContentHandler::startDocument() 以让处理程序为新内容做好准备。文档元素和其中的文本可以通过重新实现QXmlContentHandler::startElement(),QXmlContentHandler::endElement() 和QXmlContentHandler::characters() 来处理。在完全读取文档后,您可能需要重新实现QXmlContentHandler::endDocument() 来对内容执行某些最终处理或验证。
另请参阅 QXmlDTDHandler,QXmlDeclHandler,QXmlContentHandler,QXmlEntityResolver,QXmlErrorHandler 和QXmlLexicalHandler 。
成员函数文档
QXmlDefaultHandler::QXmlDefaultHandler()
构造一个处理程序,与QXmlReader 的子类一起使用。
[virtual noexcept]
QXmlDefaultHandler::~QXmlDefaultHandler()
销毁处理程序。
[override virtual]
bool QXmlDefaultHandler::attributeDecl(const QString &eName, const QString &aName, const QString &type, const QString &valueDefault, const QString &value)
重实现:QXmlDeclHandler::attributeDecl(const QString &eName, const QString &aName, const QString &type, const QString &valueDefault, const QString &value)。
此重新实现没有任何作用。
[override virtual]
bool QXmlDefaultHandler::characters(const QString &ch)
重实现:QXmlContentHandler::characters(const QString &ch).
此重新实现不做任何事情。
[override virtual]
bool QXmlDefaultHandler::comment(const QString &ch)
重实现:QXmlLexicalHandler::comment(const QString &ch).
此重新实现不做任何事情。
[override virtual]
bool QXmlDefaultHandler::endCDATA()
重新实现:QXmlLexicalHandler::endCDATA().
这个重实现没有任何作用。
[override virtual]
bool QXmlDefaultHandler::endDTD()
重新实现:QXmlLexicalHandler::endDTD().
这个重实现没有任何作用。
[override virtual]
bool QXmlDefaultHandler::endDocument()
重新实现:QXmlContentHandler::endDocument().
这个重实现没有任何作用。
[override virtual]
bool QXmlDefaultHandler::endElement(const QString &namespaceURI, const QString &localName, const QString &qName)
重实现:QXmlContentHandler::endElement(const QString &namespaceURI, const QString &localName, const QString &qName)。
此重新实现没有任何作用。
[override virtual]
bool QXmlDefaultHandler::endEntity(const QString &name)
重实现:QXmlLexicalHandler::endEntity(const QString &name).
此重新实现不做任何事情。
[override virtual]
bool QXmlDefaultHandler::endPrefixMapping(const QString &prefix)
重实现:QXmlContentHandler::endPrefixMapping(const QString &prefix).
此重新实现不做任何事情。
[override virtual]
bool QXmlDefaultHandler::error(const QXmlParseException &exception)
重实现:QXmlErrorHandler::error(const QXmlParseException &exception).
此重构无任何作用。
[override virtual]
QString QXmlDefaultHandler::errorString() const
重实现:QXmlContentHandler::errorString() 常量。
返回默认错误字符串。
[override virtual]
bool QXmlDefaultHandler::externalEntityDecl(const QString &name, const QString &publicId, const QString &systemId)
重实现:QXmlDeclHandler::externalEntityDecl(const QString &name, const QString &publicId, const QString &systemId).
此重构无任何作用。
[override virtual]
bool QXmlDefaultHandler::fatalError(const QXmlParseException &exception)
重实现:QXmlErrorHandler::fatalError(const QXmlParseException &exception).
此重构无任何作用。
[override virtual]
bool QXmlDefaultHandler::ignorableWhitespace(const QString &ch)
重实现:QXmlContentHandler::ignorableWhitespace(const QString &ch).
此重新实现不做任何事情。
[override virtual]
bool QXmlDefaultHandler::internalEntityDecl(const QString &name, const QString &value)
重实现:QXmlDeclHandler::internalEntityDecl(const QString &name, const QString &value)。
此重新实现不执行任何操作。
[override virtual]
bool QXmlDefaultHandler::notationDecl(const QString &name, const QString &publicId, const QString &systemId)
重实现:QXmlDTDHandler::notationDecl(const QString &name, const QString &publicId, const QString &systemId).
此重构无任何作用。
[override virtual]
bool QXmlDefaultHandler::processingInstruction(const QString &target, const QString &data)
重实现:QXmlContentHandler::processingInstruction(const QString &target, const QString &data)。
此重构无任何作用。
[override virtual]
bool QXmlDefaultHandler::resolveEntity(const QString &publicId, const QString &systemId, QXmlInputSource *&ret)
重实现:QXmlEntityResolver::resolveEntity(const QString &publicId, const QString &systemId, QXmlInputSource *&ret).
将ret 设置为nullptr
,以便阅读器使用 XML 文档中提供的系统标识符。
[override virtual]
void QXmlDefaultHandler::setDocumentLocator(QXmlLocator *locator)
重实现:QXmlContentHandler::setDocumentLocator(QXmlLocator *locator)。
此重新实现不做任何事情。
[override virtual]
bool QXmlDefaultHandler::skippedEntity(const QString &name)
重实现:QXmlContentHandler::skippedEntity(const QString &name).
此重新实现不做任何事情。
[override virtual]
bool QXmlDefaultHandler::startCDATA()
重新实现:QXmlLexicalHandler::startCDATA().
这个重实现没有任何作用。
[override virtual]
bool QXmlDefaultHandler::startDTD(const QString &name, const QString &publicId, const QString &systemId)
重实现:QXmlLexicalHandler::startDTD(const QString &name, const QString &publicId, const QString &systemId).
此重构无任何作用。
[override virtual]
bool QXmlDefaultHandler::startDocument()
重新实现:QXmlContentHandler::startDocument().
这个重实现没有任何作用。
[override virtual]
bool QXmlDefaultHandler::startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts)
重实现:QXmlContentHandler::startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts).
此重新实现没有任何作用。
[override virtual]
bool QXmlDefaultHandler::startEntity(const QString &name)
重实现:QXmlLexicalHandler::startEntity(const QString &name).
此重新实现不做任何事情。
[override virtual]
bool QXmlDefaultHandler::startPrefixMapping(const QString &prefix, const QString &uri)
重实现:QXmlContentHandler::startPrefixMapping(const QString &prefix, const QString &uri).
此重新实现无任何作用。
[override virtual]
bool QXmlDefaultHandler::unparsedEntityDecl(const QString &name, const QString &publicId, const QString &systemId, const QString ¬ationName)
重实现:QXmlDTDHandler::unparsedEntityDecl(const QString &name, const QString &publicId, const QString &systemId, const QString ¬ationName)。
此重新实现无任何作用。
[override virtual]
bool QXmlDefaultHandler::warning(const QXmlParseException &exception)
重实现:QXmlErrorHandler::warning(const QXmlParseException &exception).
此重构无任何作用。
© 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.