QDomDocument按类获取元素

时间:2013-12-19 16:00:05

标签: html c++ qt qt4 qtxml

我在一个包含不同类的HTML文件中有几个div,如下所示:

<div class='A'>...</div>
<div class='B'>...</div>
<div class='C'>...</div>

我有一个Qt(4.7)程序,我需要能够根据类获得某个div。我需要在这个程序中使用QDomDocument。我从文档中知道该类有一个函数elementById(),但是我不能用它来处理类,只有id。这不是一个HTML文件或任何东西,所以我无法控制它的类或ID。有没有办法做到这一点,我失踪了?谢谢!

2 个答案:

答案 0 :(得分:2)

看起来你需要这样的东西:

的main.cpp

#include <QDomDocument>
#include <QDomElement>
#include <QDomNodeList>
#include <QDomAttr>

#include <QFile>
#include <QDebug>

int main()
{
    QDomDocument doc("mydocument");
    QFile file("mydocument.xml");
    if (!file.open(QIODevice::ReadOnly))
        return 1;

    if (!doc.setContent(&file)) {
        file.close();
        return 1;
    }
    file.close();

    QDomNodeList divNodeList = doc.elementsByTagName("div");

    for (int i = 0; i < divNodeList.size(); ++i) {
        QDomElement domElement = divNodeList.at(i).toElement();
        QDomAttr attribute = domElement.attributeNode("class");
        qDebug() << "Attribute value" << attribute.value();
        if (attribute.value() == "A")
            qDebug() << "Found A";
    }

    return 0;
}

输出

  

g ++ -Wall -fPIC -I / usr / include / qt -I / usr / include / qt / QtCore -I / usr / include / qt / QtXml -lQt5Xml -lQt5Core main.cpp&amp;&amp; ./a.out

答案 1 :(得分:1)

首先尝试获取 div 元素:

QDomDocument l_doc;
l_doc.setContent( "here goes your html" );
QDomNodeList l_divs( l_doc.elementsByTagName( "div" ) );

然后您可以使用以下方法检索属性值:

for ( int i = 0 ; i < l_divs.size() ; ++i ) {
    QDomElement l_div( l_divs.at( i ).toElement() );
    QString l_class( l_div.attribute( "class" ) );
    qDebug() << "class attribute:" << l_class;
}

我建议您重新考虑使用QDomDocument并尝试使用QWebView和QWebElement。使用这些类,您可以使用CSS选择器,这将使这(和其他)任务更容易。