Как я могу разобрать следующий HTML
<body>
<span style="font-size:11px">12345</span>
<a>Hello<a>
</body>
Я хотел бы получить данные «12345» из «span» с style = «font-size: 11px» с www.testtest.com, но мне нужны только эти данные и ничего больше.
Как я могу сделать это?
РЕДАКТИРОВАТЬ: От Qt 5.6 выпустил пост в блоге:
В версии 5.6 Qt WebKit и Qt Quick 1 больше не будут поддерживаться и будут удалены из выпуска. Исходный код для этих модулей будет по-прежнему доступен.
Итак, с Qt 5.6 — если вы не хотите скомпилировать источники -, QtWebKit
больше недоступно. Если вы используете релиз Qt старше 5.6, он не собирается компилировать QtWebKit
это может быть полезно; иначе этот ответ больше не действителен.
Трудно сказать вам, что именно нужно сделать, так как ваше объяснение неполно описывает вариант использования. Однако есть два способа продолжить.
Если вам уже нужны какие-либо другие функции из этого модуля, это не приведет к появлению каких-либо дополнительных зависимостей и будет наиболее удобным для вас.
Вам нужно получить https://doc.qt.io/archives/qt-5.5/qwebelement.html
Это произойдет, как только вы найдете первый элемент span в html:
https://doc.qt.io/archives/qt-5.5/qwebframe.html#findFirstElement
Затем вы можете просто получить текст для этого элемента с помощью соответствующего метода (ов) QWebElement. Например, вы можете использовать это для получения значения атрибута:
https://doc.qt.io/archives/qt-5.5/qwebelement.html#attribute
… но вы также можете запросить имена атрибутов, как вы можете видеть в документации и т. д.
Вот как вы получите 12345
значение:
https://doc.qt.io/archives/qt-5.5/qwebelement.html#toPlainText
Если вам не нужен webkit для вашего программного обеспечения, и html-данные поступают не так, как напрямую из Интернета, для которых вам потребуется использовать QWebKit, тогда вам лучше использовать xml-анализатор, доступный в QtCore. Это все еще может иметь место, даже если у вас нет никакой другой зависимости от QtWebKit, что эта дополнительная зависимость не вызовет никаких проблем в вашем случае использования. Трудно сказать, основываясь на вашем описании. Конечно, это было бы менее удобно, хотя и не так много, по сравнению с решением на основе webkit, которое разработано для html.
Чего вам следует избегать, так это QtXmlPatterns. На данный момент это не поддерживаемое программное обеспечение, и в любом случае это создаст дополнительную зависимость для вашего кода.
Я думаю QXmlQuery это то, что вы хотите.
Я думаю код будет как
QXmlQuery query;
query.setQuery(html, QUrl("/body/span[@style='font-size:11p']"));
QString r;
query.evaluateTo(&r);
Вы также можете предоставить URL непосредственно к запросу
query.setQuery(QUrl("http://WWW.testtest.com"), QUrl("/body/span[@style='font-size:11p']"));