在后台使用QTextBrowser而不是QWebPage解析和修改HTML页面是否值得? P>为学习C++和QT的纯目的,我编写了一个基于QT的小程序,它从本地目录读取HTML文件(多达几百个),修改它们并将它们写入另一个本地目录。

在后台使用QTextBrowser而不是QWebPage解析和修改HTML页面是否值得? P>为学习C++和QT的纯目的,我编写了一个基于QT的小程序,它从本地目录读取HTML文件(多达几百个),修改它们并将它们写入另一个本地目录。,qt,html-parsing,qwebkit,Qt,Html Parsing,Qwebkit,我的第一次尝试是使用QWebPage和QWebElement提供的HTML解析功能。然而,我遇到了一些严重的内存泄漏问题,这些问题是由QWebPage引起的(这很可能是由于我没有正确使用它。但这是另一个话题,不是这个问题的一部分) 到目前为止,我还没有使用任何GUI,尽管我打算稍后再使用,但我程序的这一部分永远不会是GUI的一部分,而是在后台的某个地方。 因此,我想用QTextBrowser取代QWebPage的用法,这看起来更轻量级。但是,我在qtapi中找不到类似于QWebElement解析

我的第一次尝试是使用
QWebPage
QWebElement
提供的HTML解析功能。然而,我遇到了一些严重的内存泄漏问题,这些问题是由
QWebPage
引起的(这很可能是由于我没有正确使用它。但这是另一个话题,不是这个问题的一部分)

到目前为止,我还没有使用任何GUI,尽管我打算稍后再使用,但我程序的这一部分永远不会是GUI的一部分,而是在后台的某个地方。
因此,我想用
QTextBrowser
取代
QWebPage
的用法,这看起来更轻量级。但是,我在qtapi中找不到类似于
QWebElement
解析函数的函数。到目前为止,我的代码依赖于
QWebElement::findFirst()
QWebElement::nextSibling()
,最后是
QWebElement::takeFromDocument()

那么,实现(或使用)
QTextBrowser
作为HTML解析器几乎没有痛苦的可能性吗?甚至可能是“最佳实践”?
我不需要评估任何JavaScript,尽管它很可能是在HTML页面中内联的。我也不需要使用CSS进行样式设置,尽管在所讨论的HTML页面中大量使用CSS。我只需要根据id或CSS类检索某些HTML块(作为表行)

PS:我只愿意使用当前的C++ HTML解析库,以使用纯QT失败的所有可行和合理的尝试。 PPS:只是为了看到和了解它们,我也想了解一下现在的非凡解决方案


下面是我当前代码的一部分,我使用
QWebElement
解析并删除HTML页面的某些部分
reportPage
是一个
QWebPage
对象

reportPage->document().findFirst( "table[id=gadgettable]" ).findFirst( "tr[class=c2]" ).takeFromDocument();
reportPage->mainFrame()->documentElement().findFirst( "table[id=gadgettable]" ).findFirst( "tr" ).takeFromDocument();
reportPage->mainFrame()->documentElement().findFirst( "table[id=gadgettable]" ).findFirst( "td[id=gadgettable-left-td]" ).takeFromDocument();
reportPage->mainFrame()->documentElement().findFirst( "table[id=gadgettable]" ).findFirst( "td[id=gadgettable-right-td]" ).takeFromDocument();
reportPage->mainFrame()->documentElement().findFirst( "table[id=gadgettable]" ).findFirst( "tr" ).nextSibling().takeFromDocument();
reportPage->mainFrame()->documentElement().findFirst( "table[id=gadgettable]" ).findFirst( "tr" ).nextSibling().takeFromDocument();

QTextBrowser不是为您建议的编辑类型而设计的。但是,根据您的描述,QDomDocument/QdomeElement代码可能适合您—这取决于您的输入文档是否与XML充分兼容,能够被DOM类再次接受和写出。(特别是,这种方法可能会丢失元素的格式)


此外,核心DOM代码缺乏高级查询支持—您需要手动搜索DOM中的id属性,或者使用更高级的XPath/XQuery支持。

我刚刚尝试使用QDomDocument。它真的很轻。但由于我正在处理的HTML文件远远不是有效的XHTML,因此每个文件中相当大的一部分都被忽略了。我不知道XPath/XQuery是否可以处理这个问题。否则我想,我得回到正则表达式。