QDomElement无法检测到正确的nodeType

时间:2017-03-11 22:21:29

标签: c++ xml qt dom qdomdocument

我目前正在解析XML文档,因为QDomElement似乎有问题来检测正确的nodeType。

我的xml文档包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>Tove</to>
  <from>
    <me>Jani</me>
  </from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

要在文档中阅读的代码如下:

QFile xmlFile("note.xml");

if (!xmlFile.open(QIODevice::ReadOnly)) {
     qDebug() << "error while opening file";
}

QDomDocument xmlDoc;
if (!xmlDoc.setContent(&xmlFile)) {
    qDebug() << "error while setting xml content";
}

QDomElement rootElement = xmlDoc.documentElement();
QDomElement firstLevel = rootElement.firstChildElement();

while (!firstLevel.isNull()) {
    qDebug() << firstLevel.tagName() << firstLevel.text() << firstLevel.nodeType();
    firstLevel = firstLevel.nextSiblingElement();
}

xmlFile.close();

我的问题是,即使它只包含文本元素,我总是在调用firstLevel.nodeType()时收到QDomNode :: ElementNode。但是对于解析,必须知道正确的nodeType。我该怎么做以获得实际类型?

此致 Frogtime

1 个答案:

答案 0 :(得分:0)

nodeType == QDomNode::NodeType仅设置为最内层节点。这是DOM规范所要求的:

  

Text接口表示文本内容(称为字符   Element或Attr中的XML数据)。如果里面没有标记   元素的内容,文本包含在单个对象中   实现Text接口,该接口是元素的唯一子元素。   如果有标记,则将其解析为元素和文本列表   形成元素子元素列表的节点。

为清楚起见,请查看稍微修改过的代码:

while (!firstLevel.isNull()) {
    qDebug() << firstLevel.tagName() << firstLevel.text() << firstLevel.nodeType();
    QDomNode firstNode = firstLevel.firstChild();
    qDebug() << "And the child has nodetype:" << firstNode.nodeType();
    firstLevel = firstLevel.nextSiblingElement();
}