在前一篇部落格《QT QXmlStreamReader用法小結》中,我們介紹了QXmlStreamReader的基本用法。QXmlStreamReader主要用于xml檔案的讀取,這一篇則介紹QT下xml檔案存儲類QXmlStreamWriter。先簡單介紹API,然後給出應用執行個體(仍然以短信為例)。
一 API介紹
writeStartDocument():寫文檔頭,作用類似于建立一個xml文檔,并在文檔開頭部分寫入版本資訊和編碼資訊,一般為: <?xml version="1.0" encoding="UTF-8"?>
writer.writeEndDocument():對應于writeStartDocument(),當調用這個函數時,即表示文檔資訊寫入完畢
writeStartElement():寫入開始記号,即<>
writeEndElement():寫入結束記号,即</>
writeTextElement():寫入文本資訊記号,如短信的發送人、短信内容、短信時間等
二 應用執行個體
我們以寫入message.xml為例,寫入資料後,xml檔案内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<DATA>
<Sms>
<Name>wlc</Name>
<Number>18725658147</Number>
<Content>短信測試1</Content>
<Time>2012-07-25 23:54:10</Time>
</Sms>
<Sms>
<Name>rt</Name>
<Number>13555555555</Number>
<Content>短信測試2</Content>
<Time>2012-07-26 00:21:24</Time>
</Sms>
<Sms>
<Name>wzg</Name>
<Number>18656765434</Number>
<Content>短信測試3</Content>
<Time>2012-07-26 00:22:03</Time>
<Type>0</Type>
<Read>1</Read>
</Sms>
</DATA>
xml寫入資料的代碼如下,通過閱讀執行個體代碼,我們應該很容易了解第一步中介紹的API,以及API的調用順序。
void MsgModel::save_messge()
{
QFile file("message.xml");
if(file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QXmlStreamWriter writer(&file);
writer.setAutoFormatting(true);
writer.writeStartDocument();
writer.writeStartElement("DATA");
std::multimap<QString, Message*>::iterator pos;
for(pos = message_map->begin();pos != message_map->end();pos++)
{
Message *message = pos->second;
writer.writeStartElement("Sms");
writer.writeTextElement("Name", message->GetMsgName());
writer.writeTextElement("Number", message->GetMsgPhone());
writer.writeTextElement("Content", message->GetMsgContent());
writer.writeTextElement("Time", message->GetMsgTime());
writer.writeEndElement();
}
writer.writeEndElement();
writer.writeEndDocument();
file.close();
}
}