QXmlStreamReader::isEndElement() returning false



为什么QXmlStreamReader::isEndElement()在遇到类似<element/>的情况时返回false?我如何识别<element/>

如果解析了一个空元素<element/>,您应该会看到一个StartElement令牌,后面紧跟着一个EndElement令牌:

读取器使用namespaceUri()和name()。空元素也报告为StartElement,后面是直接由EndElement执行。

但是,如果位于StartElement令牌上,调用QXmlStreamReader::isEndElement()将始终返回false,即使元素为空。

要回答您的问题,Qt的文档中提到了关于空元素的内容,请参阅QXmlStreamReader::StartElement一节,因此基本上是在启动后的直接endElement,但如果您尝试这样做,则不会发生这种情况。要做到这一点,你需要做到。

Qt的文档"QXmlStreamReader::readNextStartElement()"说:读取器报告具有namespaceUri()和name()的元素的开始空元素也报告为StartElement,后面紧跟EndElement可以调用便利函数readElementText()来连接所有内容,直到对应的EndElement为止。属性在Attributes()中报告,命名空间声明在namespaceDeclarations()中。

因此,请参阅Qt文档中突出显示的"QXmlStreamReader::readNextStartElement()"部分例如

<empty/>
<empty></empty>

上面是两组空标签的例子,在技术上是相同的。

所以你需要做的是调用下面的函数,这样你就可以很好地获得标签"empty"的起始元素

QXmlStreamReader::readNextStartElement()

然后,您需要调用下面的函数,该函数将带您到达指定起始元素的结束元素。

QXmlStreamReader::readElementText()

现在,如果你调用下面的函数,它会给你真正的

QXmlStreamReader::isEndElement()

它还有一些更复杂的问题,这不是一个完美的解决方案,但当我曾经面临这个问题时,经过一番尝试,我发现了这一点。

相关内容

  • 没有找到相关文章

最新更新