0

我目前正在努力解析 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();

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

问候, Frogtime

4

1 回答 1

1

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();
}
于 2017-03-13T11:07:16.477 回答