使用Qt中包含HTML的节点解析XML

使用Qt中包含HTML的节点解析XML,qt,html-parsing,xml-parsing,Qt,Html Parsing,Xml Parsing,我尝试解析一个XML文件,其中一些节点在Qt中包含HTML,如下所示: <root> <list> <element>Some <i>text<i></element> <element><b>another line of text<b></element> <element><i>Tag opened here</element&

我尝试解析一个XML文件,其中一些节点在Qt中包含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>

一些文本
另一行文字
标签在这里打开
在这里关门
我在Qt中尝试了不同的方法,但是从节点获取HTML是不可能的(以一种简单的方式)

QDomDocument
我找到的获取QdomeElement文本的唯一方法是: 使用save()函数(),然后我将得到整行“…”,而不仅仅是内部文本

QXmlStreamReader
有函数readElementText(QXmlStreamReader::IncludeChildElements)(),但它删除了HTML标记,因此第一个示例的文本将只是“一些文本”

能否以更有效的方式做到这一点

我想到了另一个解决方案,你怎么看:


在解析xml文件之前,如何包装CDATA部分中标记的内容(使用字符串替换或正则表达式函数)?

执行此操作的dom方法应该是nodeValue()。

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"