字符串匹配在Qt从html
String matching in Qt from an html
我正在尝试从html中获取特定的单词,并将它们显示在纯文本编辑中(稍后将它们添加到表中)。尽管我设法弄明白了这个词的开头部分,但我还是弄不清结尾部分。它显示从起始位置开始的所有内容。html是这样的:
<span class="title">Some name here</span>
这是我写的代码。
int sTitle = html_code.indexOf("title">") + 7;
int eTitle = html_code.indexOf("</span>");
int titLength = eTitle - sTitle;
QString title = html_code.mid(sTitle, titLength);
ui->searchBox->setPlainText(title);
在html中也有很多/span和title标签。谢谢你!
如果将以下字符串分配给html_code
,您的代码将正常工作:
QString html_code = "<span class="title">Some name here</span>";
然而,对于更复杂的文档,你可以考虑使用强大的工具QtWebKit
和它的QWebElement
类,提供访问(X)HTML文档的DOM元素的树状结构。它将允许您只搜索第一个特定的标记(或更复杂的结构)或所有感兴趣的条目的集合,例如
#include <QWebPage>
#include <QWebFrame>
#include <QWebElement>
void MainWindow::some_handler()
{
QString html_code = "<span class="title">Some name here</span>"
"<span class="title">Some other name here</span>";
QWebPage page;
QWebFrame *frame = page.mainFrame();
frame->setHtml(html_code);
QWebElement document = frame->documentElement();
// one item
QWebElement title = document.findFirst("span.title");
QString text;
text += "First title span:nt" + title.toPlainText() + 'n';
// all items
QWebElementCollection title_collection = document.findAll("span.title");
text += "nAll title spans:n";
foreach (QWebElement elem, title_collection) {
text += 't' + elem.toPlainText() + 'n';
}
ui->searchBox->setPlainText(text);
}
应该在项目文件QT += webkitwidgets
中添加以下模块来构建上述代码。
注意QWebPage
对象的工作方式类似于浏览器。它加载链接的内容并运行JavaScript。如果不需要,可以考虑使用其他xml解析器,例如Qt xml模块。该模块不被积极支持,但是它也通过QDomDocument
, QDomElement
和QDomNodeList
类提供了用于文档元素树结构的API。代码不像QWebElement
那么好,因为这里需要遍历节点列表并手动检查节点类型及其属性"class",例如
QDomDocument document;
document.setContent(html_code);
QDomElement elem = document.documentElement();
QDomNodeList node_list = elem.elementsByTagName("span");
QString text;
for (int i = 0; i < node_list.length(); ++i) {
if (node_list.at(i).isElement() &&
node_list.at(i).toElement().attribute("class") == "title")
{
text += node_list.at(i).toElement().text() + 'n';
}
}
try this:
int sTitle = html_code.indexOf("title">") + 7;
int eTitle = html_code.indexOf("</span>");
QStringRef title(html_code, sTitle, eTitle);
ui->searchBox->setPlainText(title.toString());
相关文章:
- 如何在Qt WebChannel中以独立于平台的方式在HTML/Javascript和C++之间进行通信?
- 通过QT WebSocket将OpenCV Mat Image发送到HTML客户端
- QT HTML 与对齐不起作用
- QT 5.8 WebEngine HTML 5视频播放器支持
- Qt在QtWebEngine视图中显示QImage或像素映射(从C++到HTML)
- 将数据从 html 传递到 QT
- 如何在 QT 中访问 HTML 脚本变量
- Qt QNetworkAccessManager 或其他方法获取 html 状态代码而不获取页面 contenet
- QT和WebKit并未显示所有CSS 3,HTML 5效果
- html 标签在 Qt 中不起作用
- 用一些html从Qt中打开默认邮件应用程序
- 使用 Qt 将 HTML 转换为 PDF
- Qt:如何以纯文本形式打开Html文件
- Qt-html解析未找到任何标记
- Qt c++如何在加载新的HTML页面后释放内存
- 基于linux的HTML web客户端的QT REST开发
- QT是否支持运行时动态UI生成和HTML呈现
- Qt 5在Android上解析HTML
- Parsing html with qt?
- 使用GTK+ Webkit Webview(和Qt Webkit bridge)从JavaScript / HTML调用