我尝试用Qt中的一些包含HTML的节点解析XML文件,它看起来像这样:
<root>
<list>
<element>Some <i>text<i></element>
<element><b>another line of text<b></element>
<element><i>Tag opened here</element>
<element>and closed here</i></element>
</list>
</root>
我在Qt中尝试了不同的方法,但是从节点获取HTML在某种程度上是不可能的(以一种简单的方式)。
QDomDocument :
我找到获取QDomElement文本的唯一方法:
使用save()函数(documentation),但我会得到整行“&lt; element&gt; ...&lt; / element&gt;”,而不仅仅是内部文本。
QXmlStreamReader
函数readElementText(QXmlStreamReader :: IncludeChildElements)(documentation),但它删除了HTML标记,因此第一个示例的文本只是“Some text”。
能否以更有效的方式完成?
我想到了另一种解决方案,您如何看待它:
如何包装&lt; element&gt;的内容?在解析xml文件之前,CDATA部分中的标签(使用字符串替换或正则表达式函数)?
答案 0 :(得分:1)
QDomDocument和QXmlStreamReader都无法解析HTML。它们是XML解析器。要解析Qt中的HTML,你应该使用QtWebKit。
#include <QtCore>
#include <QtGui>
#include <QtWebKit>
int main(int argc, char ** argv)
{
QApplication app(argc, argv);
QString html =
" \\
<root> \\
<list> \\
<element>Some <i>text<i></element> \\
<element><b>another line of text<b></element> \\
<element><i>Tag opened here</element> \\
<element>and closed here</i></element> \\
</list> \\
</root> \\
";
QWebPage page;
page.mainFrame()->setHtml(html);
QWebElement htmlElement = page.mainFrame()->findFirstElement("root list element i");
qDebug() << htmlElement.toPlainText();
return app.exec();
}
输出:
"text"
答案 1 :(得分:0)
这样做的dom方法应该是nodeValue()。