Как разобрать HTML с C ++ / Qt?

Как я могу разобрать следующий HTML

<body>
<span style="font-size:11px">12345</span>
<a>Hello<a>
</body>

Я хотел бы получить данные «12345» из «span» с style = «font-size: 11px» с www.testtest.com, но мне нужны только эти данные и ничего больше.

Как я могу сделать это?

6

Решение

РЕДАКТИРОВАТЬ: От Qt 5.6 выпустил пост в блоге:

В версии 5.6 Qt WebKit и Qt Quick 1 больше не будут поддерживаться и будут удалены из выпуска. Исходный код для этих модулей будет по-прежнему доступен.

Итак, с Qt 5.6 — если вы не хотите скомпилировать источники -, QtWebKit больше недоступно. Если вы используете релиз Qt старше 5.6, он не собирается компилировать QtWebKitэто может быть полезно; иначе этот ответ больше не действителен.


Трудно сказать вам, что именно нужно сделать, так как ваше объяснение неполно описывает вариант использования. Однако есть два способа продолжить.

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

XML-парсер в QtCore

Если вам не нужен webkit для вашего программного обеспечения, и html-данные поступают не так, как напрямую из Интернета, для которых вам потребуется использовать QWebKit, тогда вам лучше использовать xml-анализатор, доступный в QtCore. Это все еще может иметь место, даже если у вас нет никакой другой зависимости от QtWebKit, что эта дополнительная зависимость не вызовет никаких проблем в вашем случае использования. Трудно сказать, основываясь на вашем описании. Конечно, это было бы менее удобно, хотя и не так много, по сравнению с решением на основе webkit, которое разработано для html.

Чего вам следует избегать, так это QtXmlPatterns. На данный момент это не поддерживаемое программное обеспечение, и в любом случае это создаст дополнительную зависимость для вашего кода.

2

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

Я думаю 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']"));
5

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