我在一个包含不同类的HTML文件中有几个div,如下所示:
<div class='A'>...</div>
<div class='B'>...</div>
<div class='C'>...</div>
我有一个Qt(4.7)程序,我需要能够根据类获得某个div。我需要在这个程序中使用QDomDocument。我从文档中知道该类有一个函数elementById()
,但是我不能用它来处理类,只有id。这不是一个HTML文件或任何东西,所以我无法控制它的类或ID。有没有办法做到这一点,我失踪了?谢谢!
答案 0 :(得分:2)
看起来你需要这样的东西:
#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选择器,这将使这(和其他)任务更容易。