目标是获取一个类似于
注意:我希望避免为此包含完整的webkit。
QDomDocument
的对象,其内容为HTML(而非XML)文档。问题在于,一些标签,尤其是script
标签会触发错误:<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
var a = [1,2,3];
var b = (2<a.length);
</script>
</head>
<body/>
</html>
格式错误:元素类型“a.length”后面必须跟随属性规范、“>”或“/>”。
我知道HTML与XML不同,但是Qt应该有解决此问题的方法:
- 将解析器设置为接受HTML
- 另一个用于HTML的类
- 一种将某些标签名称设置为CDATA的方法。
我的当前尝试只能实现普通的XML解析:
QString mainHtml;
{
QFile file("main.html");
if (!file.open(QIODevice::ReadOnly)) qDebug() << "Error reading file main.html";
QTextStream stream(&file);
mainHtml = stream.readAll();
file.close();
}
QQDomDocument doc;
QString errStr;
int errLine=0, errCol=0;
doc.setContent( mainHtml, false, &errStr, &errLine, &errCol);
if (!errStr.isEmpty())
{
qDebug() << errStr << "L:" << errLine << ":" << errCol;
}
std::function<void(const QDomElement&, int)> printTags=
[&printTags](const QDomElement& elem, int tab)
{
QString space(3*tab, ' ');
QDomNode n = elem.firstChild();
for( ;!n.isNull(); n=n.nextSibling())
{
QDomElement e = n.toElement();
if(e.isNull()) continue;
qDebug() << space + e.tagName();
printTags( e, tab+1);
}
};
printTags(doc.documentElement(), 0);
注意:我希望避免为此包含完整的webkit。