html — QDomDocument получить элемент по классу

У меня есть несколько div в файле HTML с разными классами, например:

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

У меня есть программа Qt (4.7), где я должен иметь возможность получить определенный div из этого, основываясь на классе. Мне нужно использовать QDomDocument в этой программе. Из документации я знаю, что у этого класса есть функция elementById(), но я не могу заставить это работать с классами, только с идентификаторами. Это не HTML-файл, созданный или что-то в этом роде, поэтому я не могу контролировать, является ли он классом или идентификатором. Есть ли способ сделать это, что я скучаю? Спасибо!

1

Решение

Похоже, вам нужно что-то вроде этого:

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

2

Другие решения

Попробуйте получить ДИВ элементы во-первых, делая это:

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-селекторы, что значительно облегчит эту (и другие) задачи.

1

По вопросам рекламы [email protected]