当QXmlStreamReader::isEndElement()遇到类似<element/>的东西时,为什么它返回为false ?我如何识别<element/>?
发布于 2016-04-07 11:28:22
如果解析了一个空元素<element/>,您应该将一个StartElement令牌紧跟在EndElement令牌之后:
读取器用namespaceUri()和name()报告元素的开头。空元素也被报告为StartElement,后面是EndElement。
但是,如果位于一个QXmlStreamReader::isEndElement()令牌上,即使元素是空的,调用StartElement也总是返回StartElement。
发布于 2019-07-12 12:27:47
要回答您的问题,Qt的文档中提到了这关于空元素的内容,请参阅QXmlStreamReader::StartElement一节,因此它在开始后基本上是直接的endElement,但是如果您试图这样做,情况就不会这样。要做到这一点,你需要做。
Qt关于'QXmlStreamReader::readNextStartElement()‘的文档说:读取器用namespaceUri()和name()报告元素的开始。空元素也被报告为StartElement,后面是EndElement。可以调用方便函数readElementText()来连接所有内容,直到相应的EndElement。属性在namespaceDeclarations()中的attributes()、名称空间声明中报告。
因此,请参阅Qt文档中突出显示的'QXmlStreamReader::readNextStartElement()‘的部分,例如。
<empty/>
<empty></empty>上面是两组空标签的例子,技术上是一样的。
因此,您需要做的是调用下面的函数,这样就可以很好地获得标记‘空’的开始元素。
QXmlStreamReader::readNextStartElement()然后,您需要调用下面的函数,它将带您到指定开始元素的end元素。
QXmlStreamReader::readElementText()现在,如果调用下面的函数,它将给出true
QXmlStreamReader::isEndElement()它有一些更复杂的,这不是一个完美的解决方案,但我想出了一些试验,当我曾经面对这个问题。
https://stackoverflow.com/questions/36474429
复制相似问题