我可以在QDomDocument中找到具有给定属性的所有XML节点吗?

时间:2013-07-24 14:14:07

标签: c++ xml qt

我正在使用Qt 4.7.4。在我的程序中,QDomDocument中的每个QDomNode都具有唯一的标识符属性。有没有一种简单的方法来定位具有给定属性的所有节点(在这种情况下,只有一个节点)?

我发现的任何内容都表明这是可能的,但我想我也可以问。

我想我可以将标识符放在原始节点的子节点中,搜索标识符节点,然后取其父节点,但我更愿意将其保存在属性中。

1 个答案:

答案 0 :(得分:5)

您需要递归扫描文档树以自行查找元素。例如,要查找具有给定属性名称的所有元素:

void findElementsWithAttribute(const QDomElement& elem, const QString& attr, QList<QDomElement> foundElements)
{
  if( elem.attributes().contains(attr) )
    foundElements.append(elem);

  QDomElement child = elem.firstChildElement();
  while( !child.isNull() ) {
    findElementsWithAttribute(child, attr, foundElements);
    child = child.nextSiblingElement();
  }
}

QList<QDomElement> foundElements;
QDomDocument doc;
// Load document
findElementsWithAttribute(doc.documentElement(), "myattribute", foundElements);