QXmlContentHandler Class

QXmlContentHandler 类为报告 XML 数据的逻辑内容提供了一个接口。更多

Header: #include <QXmlContentHandler>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core5Compat)
target_link_libraries(mytarget PRIVATE Qt6::Core5Compat)
qmake: QT += core5compat
继承于

QXmlDefaultHandler

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

公共函数

virtual ~QXmlContentHandler()
virtual bool characters(const QString &ch) = 0
virtual bool endDocument() = 0
virtual bool endElement(const QString &namespaceURI, const QString &localName, const QString &qName) = 0
virtual bool endPrefixMapping(const QString &prefix) = 0
virtual QString errorString() const = 0
virtual bool ignorableWhitespace(const QString &ch) = 0
virtual bool processingInstruction(const QString &target, const QString &data) = 0
virtual void setDocumentLocator(QXmlLocator *locator) = 0
virtual bool skippedEntity(const QString &name) = 0
virtual bool startDocument() = 0
virtual bool startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts) = 0
virtual bool startPrefixMapping(const QString &prefix, const QString &uri) = 0

详细说明

如果应用程序需要了解基本的解析事件,可以实现该接口并使用QXmlReader::setContentHandler() 激活它。然后,阅读器就可以通过此接口报告与文档相关的基本事件,如元素和字符数据的开始和结束。

该接口中的事件顺序非常重要,它反映了文档本身的信息顺序。例如,元素的所有内容(字符数据、处理指令和子元素)都会按顺序出现在startElement() 事件和相应的endElement() 事件之间。

QXmlDefaultHandler 提供了该接口的默认实现;如果只想了解某些解析事件,从QXmlDefaultHandler 类子类是非常方便的。

startDocument() 函数在文档开始时调用,而endDocument() 则在文档结束时调用。解析开始前,setDocumentLocator() 会被调用。每个元素都会调用startElement() 函数,每个元素结束时会调用endElement() 函数。characters() 函数用于调用字符数据块;ignorableWhitespace() 用于调用空白块;processingInstruction() 用于调用处理指令。如果实体被跳过,则调用skippedEntity() 函数。在前缀-URI 范围的开头,startPrefixMapping() 会被调用。

另请参见 QXmlDTDHandler,QXmlDeclHandler,QXmlEntityResolver,QXmlErrorHandlerQXmlLexicalHandler

成员函数文档

[virtual noexcept] QXmlContentHandler::~QXmlContentHandler()

销毁内容处理程序。

[pure virtual] bool QXmlContentHandler::characters(const QString &ch)

当阅读器解析完一大块字符数据(普通字符数据或 CDATA 部分内的字符数据;如果需要区分这两种类型,必须使用QXmlLexicalHandler::startCDATA() 和QXmlLexicalHandler::endCDATA() 函数)时,阅读器会调用该函数。字符数据在ch 中报告。

有些阅读器使用ignorableWhitespace() 函数而不是本函数来报告元素内容中的空白。

阅读器可能会在多个块中报告元素的字符数据;例如,阅读器可能希望在三个 characters() 事件("a"、"<"和 "b")中报告 "a<b"。

如果该函数返回false ,阅读器就会停止解析并报告错误。阅读器使用函数errorString() 来获取错误信息。

[pure virtual] bool QXmlContentHandler::endDocument()

阅读器在完成解析后会调用该函数。它只被调用一次,是最后一个被调用的处理函数。它在阅读器读完所有输入或因致命错误放弃解析后被调用。

如果该函数返回false ,阅读器就会停止解析并报错。阅读器使用函数errorString() 获取错误信息。

另请参见 startDocument()。

[pure virtual] bool QXmlContentHandler::endElement(const QString &namespaceURI, const QString &localName, const QString &qName)

当阅读器解析完带有限定名称qName 、本地名称localName 和命名空间 URInamespaceURI 的结束元素标签后,会调用该函数。

如果该函数返回false ,阅读器将停止解析并报错。阅读器使用函数errorString() 获取错误信息。

另请参见 startElement()。

[pure virtual] bool QXmlContentHandler::endPrefixMapping(const QString &prefix)

阅读器调用此函数来提示prefix 前缀映射的结束。

如果该函数返回false ,阅读器将停止解析并报错。阅读器使用函数errorString() 获取错误信息。

另请参阅 startPrefixMapping()。

[pure virtual] QString QXmlContentHandler::errorString() const

阅读器调用该函数以获取错误字符串,例如,如果任何处理函数返回false

[pure virtual] bool QXmlContentHandler::ignorableWhitespace(const QString &ch)

有些读者可能会使用该函数来报告元素内容中的每块空白。空格在ch 中报告。

如果该函数返回false ,阅读器将停止解析并报告错误。阅读器使用函数errorString() 获取错误信息。

[pure virtual] bool QXmlContentHandler::processingInstruction(const QString &target, const QString &data)

阅读器在解析处理指令后会调用该函数。

target 是处理指令的目标名称, 是处理指令中的数据。data

如果该函数返回false ,阅读器将停止解析并报告错误。阅读器使用函数errorString() 获取错误信息。

[pure virtual] void QXmlContentHandler::setDocumentLocator(QXmlLocator *locator)

阅读器在开始解析文档前会调用该函数。参数locator 是指向QXmlLocator 的指针,允许应用程序获取文档中的解析位置。

请勿销毁locator ;当阅读器被销毁时,它也会被销毁。(阅读器销毁后,请勿使用locator )。

[pure virtual] bool QXmlContentHandler::skippedEntity(const QString &name)

有些读者可能会跳过实体,如果他们没有看到声明(例如,因为它们在外部 DTD 中)。如果是这样,它们就会报告通过调用该函数跳过了名为name 的实体。

如果该函数返回false ,阅读器将停止解析并报告错误。阅读器会使用函数errorString() 来获取错误信息。

[pure virtual] bool QXmlContentHandler::startDocument()

阅读器在开始解析文档时会调用该函数。阅读器只调用一次该函数,在调用setDocumentLocator() 之后,在调用该类或QXmlDTDHandler 类中的任何其他函数之前。

如果该函数返回false ,阅读器就会停止解析并报错。阅读器使用函数errorString() 获取错误信息。

另请参见 endDocument()。

[pure virtual] bool QXmlContentHandler::startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts)

当阅读器解析完一个起始元素标记后,就会调用该函数。

当读取到相应的结束元素标记时,会调用相应的endElement() 函数。startElement() 和endElement() 调用总是正确嵌套的。空元素标记(如<x/> )会导致 startElement() 调用后紧接着出现endElement() 调用。

所提供的属性列表只包含具有明确值的属性。只有当阅读器的 namespace-prefix 属性为 true 时,属性列表才会包含用于名称空间声明的属性(即以 xmlns 开头的属性)。

参数namespaceURI 是命名空间 URI,如果元素没有命名空间 URI 或没有进行命名空间处理,则为空字符串。localName 是本地名称(不含前缀),如果没有进行命名空间处理,则为空字符串;qName 是限定名称(含前缀);atts 是附加到元素的属性。如果没有属性,atts 是一个空属性对象。

如果该函数返回false ,阅读器将停止解析并报错。阅读器使用函数errorString() 获取错误信息。

另请参见 endElement()。

[pure virtual] bool QXmlContentHandler::startPrefixMapping(const QString &prefix, const QString &uri)

阅读器调用该函数来提示前缀-URI 名称空间映射范围的开始。由于阅读器会自动替换元素和属性名称的前缀,因此正常的命名空间处理并不需要这一信息。

需要注意的是,startPrefixMapping() 和endPrefixMapping() 调用并不保证相互嵌套:所有 startPrefixMapping() 事件都发生在相应的startElement() 事件之前,所有endPrefixMapping() 事件都发生在相应的endElement() 事件之后,但它们的顺序并无其他保证。

参数prefix 是要声明的命名空间前缀,参数uri 是该前缀要映射的命名空间 URI。

如果该函数返回false ,阅读器将停止解析并报错。阅读器使用函数errorString() 获取错误信息。

另请参见 endPrefixMapping()。

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