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

NPL*_*PLS 7 c++ qt qtwebkit html-content-extraction qtcore

我该如何解析以下HTML

<body>
<span style="font-size:11px">12345</span>
<a>Hello<a>
</body>
Run Code Online (Sandbox Code Playgroud)

我想从www.testtest.com中使用style ="font-size:11px"从"span"中检索数据"12345",但我只想要那些数据,而不是其他任何数据.

我怎么能做到这一点?

Lol*_*4t0 5

我认为QXmlQuery就是你想要的.我认为代码就像

QXmlQuery query;

query.setQuery(html, QUrl("/body/span[@style='font-size:11p']"));

QString r;
query.evaluateTo(&r);
Run Code Online (Sandbox Code Playgroud)

您还可以直接向查询提供URL

query.setQuery(QUrl("http://WWW.testtest.com"), QUrl("/body/span[@style='font-size:11p']"));
Run Code Online (Sandbox Code Playgroud)

  • @LaszloPapp,你在哪里发现他已经有了webkit? (6认同)
  • @LaszloPapp,QtWebkit比xmlpatterns重__.QtWebkit实际上是最大的Qt部分. (2认同)

lpa*_*app 3

编辑:摘自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

一旦你在 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 数据以不同的方式出现,而不是直接来自您需要使用 QWebKit 的 Web,那么您最好使用 QtCore 中提供的 xml 解析器。即使您没有 QtWebKit 的任何其他依赖项,这种额外的依赖项也可能不会在您的用例中导致任何问题。根据你的描述很难判断。当然,与专为 html 设计的基于 webkit 的解决方案相比,这会不太方便,尽管不是那么方便。

您需要避免的是 QtXmlPatterns。到目前为止,它是一个无人维护的软件,无论哪种方式都会为您的代码引入额外的依赖项。