QXmlStreamReader :: isEndElement()返回false

时间:2016-04-07 11:10:05

标签: xml qt qxmlstreamreader

为什么QXmlStreamReader::isEndElement()在遇到类似<element/>的内容时返回false,如何识别<element/>

2 个答案:

答案 0 :(得分:3)

如果解析了空元素<element/>,您应该see StartElement令牌后面紧跟EndElement令牌:

  

读者使用namespaceUri()和。来报告元素的开头   名称()。空元素也报告为StartElement,紧随其后   直接由EndElement。

但是,如果QXmlStreamReader::isEndElement()位于false令牌上,则调用StartElement将始终返回<?php $jsonString = '[{"1":{"key":"Aansturing","value":"AAN\/UIT"}},{"1":{"key":"Maximale output","value":"6 W"}},{"1":{"key":"Product categorie","value":"Selecteerbare I OUT"}},{"1":{"key":"Output stroom","value":"350 mA \/ 700 mA"}}]'; $jsonData = json_decode($jsonString, TRUE); ?> <table border> <tr> <th>Key</th> <th>Value</th> </tr> <?php foreach ($jsonData as $oneRowData): ?> <?php foreach ($oneRowData as $oneRow): ?> <tr> <td><?php echo $oneRow['key'] ?></td> <td><?php echo $oneRow['value'] ?></td> </tr> <?php endforeach; ?> <?php endforeach; ?> </table> ,即使该元素为空。

答案 1 :(得分:0)

要回答您的问题,Qt的文档对空元素this进行了说明,请参阅QXmlStreamReader :: StartElement部分,因此基本上是启动后的直接endElement,但是如果您尝试这样做,则不会这样。 为此,您需要做。

Qt的'QXmlStreamReader :: readNextStartElement()'文档说:读者用namespaceUri()和name()报告元素的开始。 空元素也被报告为StartElement,紧随其后的是EndElement。 可以调用便捷功能readElementText()来连接所有内容,直到相应的EndElement 。属性在attribute()中报告,在namespaceDeclarations()中报告名称空间。

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

<empty/>
<empty></empty>

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

因此,您需要做的是在函数下面调用,这样您就可以很好地获得标签“ empty”的开始元素。

QXmlStreamReader::readNextStartElement()

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

QXmlStreamReader::readElementText()

现在,如果您调用下面的函数,它将为您带来真实的感觉

QXmlStreamReader::isEndElement()

它有更多的复杂性,这不是一个完美的解决方案,但是当我一次遇到这个问题时,经过一番尝试,我发现了它。