gpt4 book ai didi

c++ - 如何用qt解析xml?

转载 作者:太空宇宙 更新时间:2023-11-04 14:06:50 25 4
gpt4 key购买 nike

我正在尝试使用 QtXmlQuery 使用 qt 解析 html 页面,其中:

query.setFocus(qNetworkReply->readAll());  

但我收到以下错误信息:

Error FODC0002 in tag:trolltech.com,2007:QtXmlPatterns:QIODeviceVariable:u, 
at line 3, column 44: Entity 'ndash' not declared.

我认为这意味着我尝试阅读的 html 页面格式不正确。如何修复页面?

最佳答案

首先检查 ndash 是否在您的 xml 中声明:

<!ENTITY ndash "&#8211;"> <!-- en dash, U+2013 ISOpub --> 
<!ENTITY mdash "&#8212;"> <!-- em dash, U+2014 ISOpub -->

命名实体,在 XML 规范中也称为内部实体,是您在谈论“实体”时通常指的。您在 DTD 或内部子集中声明它们(即,作为文档中声明的一部分),并在文档中将它们用作引用。在 XML 文档解析期间,实体引用被其表示所取代。用简单的英语来说,这些实体只是在您处理文档时展开的宏。

例子:

<!DOCTYPE article PUBLIC "-//NLM//DTD Journal
Publishing DTD v3.0 20080202//EN" "journalpublishing3.dtd"
[<!ENTITY ndash "&#x2013;">]

see here for more info

如果一切正常,那么也可以尝试其他方法:您可以使用内置的 QtWebKit。示例:

class MyPageLoader : public QObject
{
Q_OBJECT

public:
MyPageLoader();
void loadPage(const QUrl&);

public slots:
void replyFinished(bool);

private:
QWebView* m_view;
};

MyPageLoader::MyPageLoader()
{
m_view = new QWebView();

connect(m_view, SIGNAL(loadFinished(bool)),
this, SLOT(replyFinished(bool)));
}

void MyPageLoader::loadPage(const QUrl& url)
{
m_view->load(url);
}

void MyPageLoader::replyFinished(bool ok)
{
QWebElementCollection elements = m_view->page()->mainFrame()->findAllElements("a");

foreach (QWebElement e, elements) {
// Process element e
}
}

使用类

MyPageLoader loader;
loader.loadPage("http://www.google.com")

您还可以找到一些包装器 here

获取元素:

QWebView* view = new QWebView(parent);
view.load(QUrl("http://www.your_site.com"));
QWebElementCollection elements = view.page().mainFrame().findAllElements("a");

关于c++ - 如何用qt解析xml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16513329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com