我有一个xml块,我需要搜索以使用QDomDocument检索特定属性的值。目前,该属性可能位于名为“panel”的标签中,或者也可能位于“panel-config”中。为了进一步增加复杂性,“面板”通常可以是文档的根节点。无论如何,目前我的代码需要这样做:
QDomElement element = XML.documentElement();
if ((element.tagName() == "panel") && (element.hasAttribute(sFACETPANELID))) {
panelId = element.attribute(sFACETPANELID);
}
else
{
// Get all our panel nodes
QDomNodeList nodes = element.elementsByTagName("panel");
// Loop through our nodes and extract our paned id
for (int i = 0; i < nodes.count(); ++i) {
QDomElement panel = nodes.at(i).toElement();
if (panel.hasAttribute(sFACETPANELID)) {
panelId = panel.attribute(sFACETPANELID);
break;
}
}
}
其次是:
QDomNodeList nodes = element.elementsByTagName("panel_config");
for (int i = 0; i < nodes.count(); ++i) {
QDomElement panel_config = nodes.at(i).toElement();
if (panel_config.hasAttribute(sFACETCLUSTERID)) {
clusterId = panel_config.attribute(sFACETCLUSTERID);
break;
}
}
这太可怕了。理想情况下,我需要一种方法来检索任何与'panel'或'panel-config'匹配的标签的nodeList()(如果你愿意的话,可以是elementsByTagNames)并在一个循环中迭代该列表。在尝试获取elementsByTagName之前,我还不想检查顶级元素是否被称为“panel”。如果可以在QT中完成任何建议吗?
答案 0 :(得分:0)
编辑:删除之前的代码
对于元素列表,使用
//QDomDocument.elementsByTagName(...)
QDomNodeList panelList = XML.elementsByTagName("panel")
QDomNodeList panelCfgList = XML.elementsByTagName("panel-config")
它也会匹配根元素。不幸的是,您不能直接更改(或添加)QDomNodeList中的节点,因此您必须使QList包含两个列表并通过它循环,或者像这样循环
for (int i = 0; i < panelList.count() || i < panelCfgList.count(); i++)
{
if (i < panelList.count())
{
QDomElement panel = panelList.at(i).toElement();
if (panel.hasAttribute(sFACETPANELID))
{
panelId = panel.attribute(sFACETPANELID);
break;
}
}
if (i < panelCfgList.count())
{
QDomElement panelCfg = panelCfgList.at(i).toElement();
if (panelCfg.hasAttribute(sFACETPANELID))
{
panelCfgId = panelCfg.attribute(sFACETPANELID);
break;
}
}
}