我正在研究MIME类型检测器,需要按名称空间和根标记名称拆分各种XML文件。
我正在使用Qt DOM API for XML:QDomDocument
,QDomNode
,QDomElement
等。
我的测试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文件。
答案 0 :(得分:2)
大声笑,我只需要添加doc.setContent (_d, true)
,其中第二个参数启用命名空间处理。希望这对其他人有用。