如何用C++/Qt解析HTML?

cbwuti44  于 2024-01-09  发布在  其他
关注(0)|答案(2)|浏览(257)

如何解析以下HTML

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

字符串
我想从www.testtest.com的“span”中检索数据“12345”,style=“font-size:11 px”,但我只需要那个数据,其他什么都不需要。
我该如何实现这一点?

nhhxz33t

nhhxz33t1#

我认为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']"));

igetnqfo

igetnqfo2#

**编辑:**来自Qt 5.6 release blog post

在5.6版本中,Qt WebKit和Qt Quick 1将不再受支持,并从版本中删除。这些模块的源代码仍然可用。
所以,从Qt 5.6开始-除非你愿意编译源代码-QtWebKit不再可用。如果你使用的是5.6以上的Qt版本,或者你不愿意编译QtWebKit,这可能会有帮助;否则这个答案不再有效
很难准确地告诉你需要做什么,因为你对用例的解释是不完整的。然而,有两种方法可以继续进行。

QtWebKit

如果您已经需要该模块的任何其他功能,这不会引入任何进一步的依赖关系,并且它将是最方便您使用的。
您需要获取https://doc.qt.io/archives/qt-5.5/qwebelement.html
当你在html中找到第一个“span”元素时,它就会出现:
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

QtCore中的XML解析器

如果您的软件不需要webkit,并且html数据以不同的方式出现,而不是直接来自Web,那么您需要使用QWebKit,那么你最好使用QtCore中提供的xml解析器。即使你没有QtWebKit的任何其他依赖,这种额外的依赖也不会在你的用例中引起任何问题。很难说基于当然,这将是不太方便,虽然不是那么多,相比基于webkit的解决方案,因为这是专为html。
您需要避免的是QtXmlPatterns。它是一个目前未维护的软件,这将为您的代码引入额外的依赖性。

相关问题