QXmlContentHandler 类

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

头文件 #include <QXmlContentHandler>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core5Compat)
target_link_libraries(mytarget PRIVATE Qt6::Core5Compat)
qmakeQT += core5compat
继承自

QXmlDefaultHandler

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

公开函数

virtual~QXmlContentHandler()
virtual boolcharacters(const QString &ch) = 0
virtual boolendDocument() = 0
virtual boolendElement(const QString &namespaceURI, const QString &localName, const QString &qName) = 0
virtual boolendPrefixMapping(const QString &prefix) = 0
virtual QStringerrorString() const = 0
virtual boolignorableWhitespace(const QString &ch) = 0
virtual boolprocessingInstruction(const QString &target, const QString &data) = 0
virtual voidsetDocumentLocator(QXmlLocator *locator) = 0
virtual boolskippedEntity(const QString &name) = 0
virtual boolstartDocument() = 0
virtual boolstartElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts) = 0
virtual boolstartPrefixMapping(const QString &prefix, const QString &uri) = 0

详细描述

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

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

QXmlDefaultHandler 类为此接口提供了默认实现;如果要只需要告知一些解析事件,则从 QXmlDefaultHandler 类派生非常方便。

在文档开始处调用startDocument()函数,在文档结束处调用endDocument()函数。在解析开始之前调用setDocumentLocator()函数。对于每个元素调用startElement()函数,在元素结束处调用endElement()函数。使用字符数据块调用characters()函数,使用空白块调用ignorableWhitespace()函数,使用处理指令调用processingInstruction()函数。如果跳过实体,调用skippedEntity()。在前缀-URI作用域的初始处调用startPrefixMapping()。

另请参阅 QXmlDTDHandlerQXmlDeclHandlerQXmlEntityResolverQXmlErrorHandlerQXmlLexicalHandler

成员函数文档

[virtual noexcept] QXmlContentHandler::~QXmlContentHandler()

销毁内容处理器。

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

当解析器解析到一段字符数据(普通字符数据或CDATA部分中的字符数据)时调用此函数。字符数据报告为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

[纯虚函数] QString QXmlContentHandler::errorString() const

读者调用此函数来获取错误字符串,例如,如果有任何处理函数返回 false

[纯虚函数] bool QXmlContentHandler::ignorableWhitespace(const QString &ch)

一些阅读器可能使用此函数来报告元素内容中的每个空白块。空白以 ch 的形式报告。

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

[纯虚函数] bool QXmlContentHandler::processingInstruction(const QString &target, const QString &data)

当解析器解析处理指令时,它会调用此函数。

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

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

[纯虚函数] void QXmlContentHandler::setDocumentLocator(QXmlLocator *locator)

在解析文档之前,解析器调用此函数。参数 locator 是一个指向 QXmlLocator 的指针,它允许应用程序获取在文档中的解析位置。

不要销毁 locator;它会在解析器销毁时被销毁。(解析器销毁后不要使用 locator)。

[纯虚函数] bool QXmlContentHandler::skippedEntity(const QString &name)

一些阅读器可能跳过实体,如果它们未看到声明(例如,因为它们在外部 DTD 中)。如果它们这样做,它们将调用此函数来报告它们跳过了名为 name 的实体。

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

[纯虚函数] bool QXmlContentHandler::startDocument()

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

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

另请参阅endDocument

[纯虚函数] 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是 qualified name(带前缀)和atts是与元素相关的属性。如果没有属性,atts是一个空的属性对象。

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

另请参阅endElement()。

[纯虚函数] bool QXmlContentHandler::startPrefixMapping(const QString &prefix, const QString &uri)

阅读器调用此函数来指示前缀-URI命名空间映射范围的开头。对于正常的命名空间处理,此信息并非必需,因为阅读器会自动替换元素和属性名称的前缀。

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

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

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

另请参阅endPrefixMapping()。

© 2024 Qt公司有限。包含在此处的文档贡献是各自所有者的版权。提供的文档是根据由自由软件基金会发布的GNU自由文档许可证版本1.3的条款许可的。Qt和相应的商标是芬兰以及世界其他地区Qt公司的商标。所有其他商标均为其各自所有者的财产。