首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QXmlStreamReader::isEndElement()返回false

QXmlStreamReader::isEndElement()返回false
EN

Stack Overflow用户
提问于 2016-04-07 11:10:05
回答 2查看 217关注 0票数 0

QXmlStreamReader::isEndElement()遇到类似<element/>的东西时,为什么它返回为false ?我如何识别<element/>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-07 11:28:22

如果解析了一个空元素<element/>,您应该将一个StartElement令牌紧跟在EndElement令牌之后:

读取器用namespaceUri()和name()报告元素的开头。空元素也被报告为StartElement,后面是EndElement。

但是,如果位于一个QXmlStreamReader::isEndElement()令牌上,即使元素是空的,调用StartElement也总是返回StartElement

票数 3
EN

Stack Overflow用户

发布于 2019-07-12 12:27:47

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

Qt关于'QXmlStreamReader::readNextStartElement()‘的文档说:读取器用namespaceUri()和name()报告元素的开始。空元素也被报告为StartElement,后面是EndElement。可以调用方便函数readElementText()来连接所有内容,直到相应的EndElement。属性在namespaceDeclarations()中的attributes()、名称空间声明中报告。

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

代码语言:javascript
复制
<empty/>
<empty></empty>

上面是两组空标签的例子,技术上是一样的。

因此,您需要做的是调用下面的函数,这样就可以很好地获得标记‘空’的开始元素。

代码语言:javascript
复制
QXmlStreamReader::readNextStartElement()

然后,您需要调用下面的函数,它将带您到指定开始元素的end元素。

代码语言:javascript
复制
QXmlStreamReader::readElementText()

现在,如果调用下面的函数,它将给出true

代码语言:javascript
复制
QXmlStreamReader::isEndElement()

它有一些更复杂的,这不是一个完美的解决方案,但我想出了一些试验,当我曾经面对这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36474429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档