我目前正在解析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
答案 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();
}