首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为XMLDataAccess使用QVariant

为XMLDataAccess使用QVariant
EN

Stack Overflow用户
提问于 2014-07-26 16:20:56
回答 1查看 185关注 0票数 0

我正在使用xml创建XMLData文件。

以下是创建新xml文件的代码

代码语言:javascript
复制
if(myFile.open(QIODevice::WriteOnly)) {
    QVariantList messageList;
    XmlDataAccess xda;
    QDataStream out(&myFile);
// Iterate through all the messages and convert it into data stream
foreach (const Message &message, inboxMessages) {

    QVariantMap messageMap;

    //Adding sender Details to QVariantMap.
    messageMap["senderName"] = QVariant(message.sender().name());
    messageMap["addressSender"] = QVariant(message.sender().address());

    // There can be multiple recipients of mail so writing the recipient List
    QList<MessageContact> recipientList  = message.recipients();
    QVariantList recipientVariantList = QVariantList() ;
    foreach (const MessageContact &messageContact , recipientList) {
        QVariantMap recipientMap;
        recipientMap["recipientName"] = QVariant(messageContact.name());
        recipientMap["recipientAddress"] = QVariant(messageContact.address());
        recipientVariantList << QVariant(recipientMap);
    }
    messageMap["recipients"] = QVariant(recipientVariantList);
    // Other details of message like body,text etc.
    messageMap["date"] = QVariant(message.serverTimestamp().toString(Qt::TextDate));
    messageMap["subject"] = QVariant(message.subject());
    messageMap["body"] = QVariant(message.body(MessageBody::PlainText).plainText());

    // Adding this object to Qvariant List
    messageList = QVariantList() << QVariant(messageMap);

}
QVariantMap topLevelMessageMap;
topLevelMessageMap[".root"] = QVariant("messages");
topLevelMessageMap["message"] = QVariant(messageList);

QVariant messageData = QVariant(topLevelMessageMap);
xda.save(messageData, &myFile);
successFlag = true;

我还在编写相应的读取代码,其中我也使用了XMLDataAccess

代码语言:javascript
复制
XmlDataAccess xda ;
QVariant parsedresponselist ;
    QFile myFile("/accounts/1000/removable/sdcard/messages/messages.xml");

    if(myFile.open(QIODevice::ReadOnly)) {
        parsedresponselist = xda.load(&myFile,"/messages/message");

    }

现在的问题是如何从parsedresponselist中检索更多的元素

请给出建议

致谢和问候

EN

回答 1

Stack Overflow用户

发布于 2014-08-05 21:21:14

XmlDataAccess::load的返回值将是一个包含QVariantListQVariantMapQStringQVariant。支持的转换相对简单(如详细的here),其目的是保留数据结构,而不是特定的XML结构。将parsedresponselist的内容转储到qDebug()并从那里开始提取它可能会很有帮助。

我现在通常做的是使用QVariant::canConvertTo<QVariantMap>()QVariant::canConvertTo<QVariantList>()来确定返回哪种类型的变量,然后遍历树,或者遍历列表中的项,或者遍历映射中的键,或者使用其他访问器,直到找到我要查找的数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24969042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档