本页内容

QXmlDefaultHandler Class

QXmlDefaultHandler 类为所有 XML 处理程序类提供了默认实现。更多内容...

标题: #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 同时继承了 `QXmlContentHandler ` 和 `QXmlErrorHandler`,因此通过继承该类,我们可以为以下两个读取器函数使用同一个处理程序:

    xmlReader.setContentHandler(handler);
    xmlReader.setErrorHandler(handler);

由于读取器会将解析错误通知给处理程序,因此如果我们希望在发生此类错误时停止解析,就必须重写 `QXmlErrorHandler::fatalError()` 方法:

boolHandler::fatalError (constQXmlParseException&exception)
{
    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() const。

返回默认的错误字符串。

[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)。

此重写实现不执行任何操作。

© 2026 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.