1

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

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

我有一个 Qt (4.7) 程序,我需要能够根据类从中获得某个 div。我需要在这个程序中使用 QDomDocument。我从文档中知道该类有一个 function elementById(),但我不能让它与类一起工作,只是 ids。这不是一个制作的 HTML 文件或任何东西,所以我无法控制它是类还是 id。有没有办法做到这一点,我错过了?谢谢!

4

2 回答 2

3

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

主文件

#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 && ./a.out

于 2013-12-19T16:30:35.803 回答
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 选择器,这将使这个(和其他)任务变得更加容易。

于 2013-12-19T16:31:19.893 回答