我有一个 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”(如果您愿意,可以使用elementsByTagNames)匹配的任何标签的nodeList(),并在一个循环中遍历该列表。我也不想在尝试获取 elementsByTagName 之前检查顶级元素是否称为“面板”。如果这可以在 QT 中完成,有什么建议吗?