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

注:该类中的所有函数都是可重入的

公共函数

重实现的公共函数

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 &notationName) override
virtual bool warning(const QXmlParseException &exception) override

详细说明

该类集合了专门处理程序类的功能,使其成为为QXmlReader 的子类(尤其是QXmlSimpleReader )实现自定义处理程序的便捷起点。该类重新实现了每个基类的虚拟函数,为许多常见情况提供了合理的默认行为。通过子类化该类并覆盖这些函数,您就可以专注于实现与您的应用程序相关的处理程序部分。

在解析过程中,必须告诉 XML 阅读器对不同类型的事件使用哪种处理程序。这意味着,尽管 QXmlDefaultHandler 提供了从其所有基类继承的函数的默认实现,但我们仍然可以针对特定类型的事件使用专门的处理程序。

例如,QXmlDefaultHandler 子类化了QXmlContentHandlerQXmlErrorHandler ,因此通过子类化它,我们可以为以下两个阅读器函数使用相同的处理程序:

    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,QXmlErrorHandlerQXmlLexicalHandler

成员函数文档

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 &notationName)

重实现:QXmlDTDHandler::unparsedEntityDecl(const QString &name, const QString &publicId, const QString &systemId, const QString &notationName)。

此重新实现无任何作用。

[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.