从 QDomDocument 中提取属性值
Extracting attribute values from a QDomDocument
我有一个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"(如果你愿意的话,elementByTagNames)匹配的任何标签检索nodeList()的方法,并在一个循环中遍历该列表。我也不想在尝试获取 elementsByTagName 之前检查顶级元素是否称为"面板"。如果可以在QT中完成,有什么建议吗?
编辑:删除了以前的代码
对于元素列表,请使用
//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;
}
}
}
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 如何从 std::atomic 中提取指针 T<T>?
- 为什么istream不支持右值提取
- C++概念:如何使用'concept'检查模板化结构的属性?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- MSVC是否支持C++11样式的属性而不是__declspec
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 类的C++属性似乎已重新初始化
- 如何设置一个范围来提取我想要获得的信息
- Qt Quick-如何仅从c++代码与qml属性交互
- 用概念检查属性的类型
- 按属性搜索和提取 XML 节点
- 如何从对象数组中提取属性数组?
- 如何使用Boost C 属性映射从配置文件中提取值
- 从 QDomDocument 中提取属性值
- 正在提取证书中主题属性的所有值
- 如何从文件中提取文件属性/元数据/注释?
- 使用Boost.从HTML中提取某些标签/属性