我如何解析以下HTML
<body>
<span style="font-size:11px">12345</span>
<a>Hello<a>
</body>
我想要检索数据&#34; 12345&#34;来自&#34; span&#34; with style =&#34; font-size:11px&#34;来自www.testtest.com,但我只想要那些数据,而不是别的。
我该如何做到这一点?
答案 0 :(得分:5)
我认为QXmlQuery就是你想要的。 我认为代码就像
QXmlQuery query;
query.setQuery(html, QUrl("/body/span[@style='font-size:11p']"));
QString r;
query.evaluateTo(&r);
您还可以直接向查询提供网址
query.setQuery(QUrl("http://WWW.testtest.com"), QUrl("/body/span[@style='font-size:11p']"));
答案 1 :(得分:3)
编辑:来自Qt 5.6 release blog post:
使用5.6时,将不再支持Qt WebKit和Qt Quick 1,并且将从该版本中删除。这些模块的源代码仍然可用。
因此,从Qt 5.6开始 - 除非你愿意编译资源 - ,QtWebKit
不再可用。如果您使用的是超过5.6的Qt版本,则愿意编译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
如果您不需要webkit用于您的软件,并且html数据以不同的方式提供,而不是直接来自您需要使用QWebKit的Web,那么您最好使用QtCore中提供的xml解析器。即使您没有来自QtWebKit的任何其他依赖项,这种额外的依赖项也不会在您的用例中引起任何问题。根据您的描述很难说清楚。可以肯定的是,与基于webkit的解决方案相比,这不太方便,尽管不是那么多。
您需要避免的是QtXmlPatterns。到目前为止,它是一个非维护的软件,无论如何都会为您的代码引入额外的依赖。