为什么QXmlStreamReader::isEndElement()在遇到类似<element/>
的内容时返回false,如何识别<element/>
?
答案 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()
它有更多的复杂性,这不是一个完美的解决方案,但是当我一次遇到这个问题时,经过一番尝试,我发现了它。