QDomNode名称空间检测的工作不正确

时间:2013-12-09 10:19:28

标签: c++ xml qt qt4 xml-namespaces

我正在研究MIME类型检测器,需要按名称空间和根标记名称拆分各种XML文件。 我正在使用Qt DOM API for XML:QDomDocumentQDomNodeQDomElement等。 我的测试xml(极其简单):

<?xml version = '1.0' encoding = 'KOI8-R'?>
<root xmlns="http://www.w3.org/1999/xhtml">
</root>

我的C ++ / Qt代码,用于加载XML并理解它的命名空间和根标记:

// _d is QIODevice object, XML data source
QDomDocument doc;
if (!doc.setContent (_d))
{
    qWarning () << "QDomDocument::setContent has failed on file";
    _d->close ();
    continue;
}

QDomElement root_item = doc.documentElement ();
qDebug () << "Namespace URI:" << root_item.namespaceURI () << root_item.localName () << root_item.prefix ();

在输出中,我只得到三个空字符串,包括命名空间一。但我期待"http://www.w3.org/1999/xhtml"。 我做错了吗?

P.S。 root_item.tagName()按预期显示root,即正确解析了XML文件。

1 个答案:

答案 0 :(得分:2)

大声笑,我只需要添加doc.setContent (_d, true),其中第二个参数启用命名空间处理。希望这对其他人有用。