我正在使用xml创建XMLData文件。
以下是创建新xml文件的代码
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
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中检索更多的元素
请给出建议
致谢和问候
发布于 2014-08-05 21:21:14
XmlDataAccess::load的返回值将是一个包含QVariantList、QVariantMap或QString的QVariant。支持的转换相对简单(如详细的here),其目的是保留数据结构,而不是特定的XML结构。将parsedresponselist的内容转储到qDebug()并从那里开始提取它可能会很有帮助。
我现在通常做的是使用QVariant::canConvertTo<QVariantMap>()和QVariant::canConvertTo<QVariantList>()来确定返回哪种类型的变量,然后遍历树,或者遍历列表中的项,或者遍历映射中的键,或者使用其他访问器,直到找到我要查找的数据。
https://stackoverflow.com/questions/24969042
复制相似问题