QXmlContentHandler Class
QXmlContentHandler 类提供了一个用于报告 XML 数据逻辑内容的接口。更多内容...
| 标题: | #include <QXmlContentHandler> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core5Compat) target_link_libraries(mytarget PRIVATE Qt6::Core5Compat) |
| qmake: | QT += core5compat |
| 由以下接口继承: |
注意:该类中的所有函数均为可重入函数。
公共函数
| 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 、QXmlErrorHandler 以及QXmlLexicalHandler 。
成员函数文档
[virtual noexcept] QXmlContentHandler::~QXmlContentHandler()
销毁内容处理程序。
[pure virtual] bool QXmlContentHandler::characters(const QString &ch)
当解析完一塊字符数据(无论是普通字符数据还是CDATA段内的字符数据;若需区分这两种类型,必须使用QXmlLexicalHandler::startCDATA()和QXmlLexicalHandler::endCDATA())时,读取器会调用此函数。字符数据通过ch 返回。
某些读取器会使用ignorableWhitespace() 函数 而不是本函数 来报告元素内容中的空白字符。
读取器可能会将一个元素的字符数据报告为多个数据块;例如,读取器可能希望将“a<b”报告为三个 characters() 事件(“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 ,命名空间 URI 为namespaceURI ,则解析器会调用此函数。
如果该函数返回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()。
© 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.