У меня есть несколько div в файле HTML с разными классами, например:
<div class='A'>...</div>
<div class='B'>...</div>
<div class='C'>...</div>
У меня есть программа Qt (4.7), где я должен иметь возможность получить определенный div из этого, основываясь на классе. Мне нужно использовать QDomDocument в этой программе. Из документации я знаю, что у этого класса есть функция elementById()
, но я не могу заставить это работать с классами, только с идентификаторами. Это не HTML-файл, созданный или что-то в этом роде, поэтому я не могу контролировать, является ли он классом или идентификатором. Есть ли способ сделать это, что я скучаю? Спасибо!
Похоже, вам нужно что-то вроде этого:
#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
Попробуйте получить ДИВ элементы во-первых, делая это:
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-селекторы, что значительно облегчит эту (и другие) задачи.