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

时间:2011-03-05 00:22:58

标签: qt html-parsing xml-parsing

我尝试用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部分中的标签(使用字符串替换或正则表达式函数)?

2 个答案:

答案 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()。