c++ - 如何在 QT 中使用 QDomDocument 对象将字符串读取为 XML

标签 c++ xml qt format qstring

我使用此函数接收作为 XML 文档的字符串:

void HttpWindow::replyFinished(QNetworkReply *reply)
{
     QString data = reply->readAll().trimmed();
     bool value=document->setContent(&data);
}

这是我的插槽和信号:

connect(reply, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));

当我把上面的代码放在上面时,我得到一个错误,没有预定义的函数来接收我发送的一个字符串...有人可以尝试更正这个问题,这样我就可以看到如何将这个 Qstring 值放入 xml 文档中。所以我可以读取 XML

谢谢

编辑: 这些是我必须选择的功能,我已经尝试了所有但似乎我没有发送正确的参数:

 // Qt extensions
    bool setContent(const QByteArray& text, bool namespaceProcessing, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
    bool setContent(const QString& text, bool namespaceProcessing, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
    bool setContent(QIODevice* dev, bool namespaceProcessing, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
    bool setContent(QXmlInputSource *source, bool namespaceProcessing, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
    bool setContent(const QByteArray& text, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
    bool setContent(const QString& text, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
    bool setContent(QIODevice* dev, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
    bool setContent(QXmlInputSource *source, QXmlReader *reader, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );

编辑 2: 我不会编译它,我可以给你这个代码:

httpwindow.cpp: In member function 'void HttpWindow::replyFinished(QNetworkReply*)':
httpwindow.cpp:140: error: no matching function for call to 'QDomDocument::setContent(QString*)'
..\..\..\..\Desktop\Qt\4.7.4\mingw\include/QtXml/qdom.h:343: note: candidates are: bool QDomDocument::setContent(const QByteArray&, bool, QString*, int*, int*)
..\..\..\..\Desktop\Qt\4.7.4\mingw\include/QtXml/qdom.h:344: note:                 bool QDomDocument::setContent(const QString&, bool, QString*, int*, int*)
..\..\..\..\Desktop\Qt\4.7.4\mingw\include/QtXml/qdom.h:345: note:                 bool QDomDocument::setContent(QIODevice*, bool, QString*, int*, int*)
..\..\..\..\Desktop\Qt\4.7.4\mingw\include/QtXml/qdom.h:346: note:                 bool QDomDocument::setContent(QXmlInputSource*, bool, QString*, int*, int*)
..\..\..\..\Desktop\Qt\4.7.4\mingw\include/QtXml/qdom.h:347: note:                 bool QDomDocument::setContent(const QByteArray&, QString*, int*, int*)
..\..\..\..\Desktop\Qt\4.7.4\mingw\include/QtXml/qdom.h:348: note:                 bool QDomDocument::setContent(const QString&, QString*, int*, int*)
..\..\..\..\Desktop\Qt\4.7.4\mingw\include/QtXml/qdom.h:349: note:                 bool QDomDocument::setContent(QIODevice*, QString*, int*, int*)
..\..\..\..\Desktop\Qt\4.7.4\mingw\include/QtXml/qdom.h:350: note:                 bool QDomDocument::setContent(QXmlInputSource*, QXmlReader*, QString*, int*, int*)

或者告诉我如何获得 Qdebug 输出。你的意思是像Qdebug<<data

最佳答案

确实没有 QDomDocument::setContent() 的重载,它接受一个 QString 指针,通过值传递将修复错误。

然而,您的代码中还有另一个严重的问题,即您正试图将 QByteArray(readAll() 的结果)转换为 QString。这不仅是不必要的,而且是危险的,因为转换是在假设内容是 ascii 的情况下完成的。您可以只调用 document->setContent(reply)。

关于c++ - 如何在 QT 中使用 QDomDocument 对象将字符串读取为 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8993345/

相关文章:

android - 在 android strings.xml 中引用字符串数组

xml - XPath 查询 : why no results?

c++ - qt 我如何将 cFilename 转换为 QString 类型

c++ - protobuf 与 zeromq 与 C++ 的链接错误

c++ - Code::Blocks 和 boost 1.55:存在动态库时不使用静态库

c++ - 拦截 C++ 隐式复制构造函数,或调用其功能

c++ - 从 QML 调用多个 C++ 函数且第一个函数包含连接调用时,QML 在触发回调之前继续

c++ - 将数据拟合到 3 次多项式

php - 如何仅通过 xml 为少数类别设置默认产品排序方向(asc/desc)

c++ - 在 Qt 中使用 QGraphicsScene 函数时出错