Qt操作XML文件(创建,读,写,修改,添加,删除)
XML文件在项目开发的过程中经常用的,比如配置文件基本上都是XML格式的,本文介绍在Qt环境下操作XML文件,具体用法看代码
原txt文件内容,在
http://www1.jctrans.com/tool/dm.htm复制下来的,空格都是\t符号
Angola 安哥拉 AO 244 -7
Afghanistan 阿富汗 AF 93 0
Albania 阿尔巴尼亚 AL 355 -7
Algeria 阿尔及利亚 DZ 213 -8
Andorra 安道尔共和国 AD 376 -8
Anguilla 安圭拉岛 AI 1264 -12
Antigua and Barbuda 安提瓜和巴布达 AG 1268 -12
Argentina 阿根廷 AR 54 -11
Armenia 亚美尼亚 AM 374 -6
Ascension 阿森松 247 -8
Australia 澳大利亚 AU 61 +2
Austria 奥地利 AT 43 -7
Azerbaijan 阿塞拜疆 AZ 994 -5
Bahamas 巴哈马 BS 1242 -13
Bahrain 巴林 BH 973 -5
Bangladesh 孟加拉国 BD 880 -2
Barbados 巴巴多斯 BB 1246 -12
Belarus 白俄罗斯 BY 375 -6
Belgium 比利时 BE 32 -7
Belize 伯利兹 BZ 501 -14
Benin 贝宁 BJ 229 -7
Bermuda Is. 百慕大群岛 BM 1441 -12
Bolivia 玻利维亚 BO 591 -12
Botswana 博茨瓦纳 BW 267 -6
Brazil 巴西 BR 55 -11
Brunei 文莱 BN 673 0
Bulgaria 保加利亚 BG 359 -6
Burkina-faso 布基纳法索 BF 226 -8
Burma 缅甸 MM 95 -1.3
Burundi 布隆迪 BI 257 -6
Cameroon 喀麦隆 CM 237 -7
Canada 加拿大 CA 1 -13
Cayman Is. 开曼群岛 1345 -13
Central African Republic 中非共和国 CF 236 -7
Chad 乍得 TD 235 -7
Chile 智利 CL 56 -13
China 中国 CN 86 0
Colombia 哥伦比亚 CO 57 0
Congo 刚果 CG 242 -7
Cook Is. 库克群岛 CK 682 -18.3
Costa Rica 哥斯达黎加 CR 506 -14
Cuba 古巴 CU 53 -13
Cyprus 塞浦路斯 CY 357 -6
Czech Republic 捷克 CZ 420 -7
Denmark 丹麦 DK 45 -7
Djibouti 吉布提 DJ 253 -5
Dominica Rep. 多米尼加共和国 DO 1890 -13
Ecuador 厄瓜多尔 EC 593 -13
Egypt 埃及 EG 20 -6
EI Salvador 萨尔瓦多 SV 503 -14
Estonia 爱沙尼亚 EE 372 -5
Ethiopia 埃塞俄比亚 ET 251 -5
Fiji 斐济 FJ 679 +4
Finland 芬兰 FI 358 -6
France 法国 FR 33 -8
French Guiana 法属圭亚那 GF 594 -12
Gabon 加蓬 GA 241 -7
Gambia 冈比亚 GM 220 -8
Georgia 格鲁吉亚 GE 995 0
Germany 德国 DE 49 -7
Ghana 加纳 GH 233 -8
Gibraltar 直布罗陀 GI 350 -8
Greece 希腊 GR 30 -6
Grenada 格林纳达 GD 1809 -14
Guam 关岛 GU 1671 +2
Guatemala 危地马拉 GT 502 -14
Guinea 几内亚 GN 224 -8
Guyana 圭亚那 GY 592 -11
Haiti 海地 HT 509 -13
Honduras 洪都拉斯 HN 504 -14
Hongkong 香港 HK 852 0
Hungary 匈牙利 HU 36 -7
Iceland 冰岛 IS 354 -9
India 印度 IN 91 -2.3
Indonesia 印度尼西亚 ID 62 -0.3
Iran 伊朗 IR 98 -4.3
Iraq 伊拉克 IQ 964 -5
Ireland 爱尔兰 IE 353 -4.3
Israel 以色列 IL 972 -6
Italy 意大利 IT 39 -7
Ivory Coast 科特迪瓦 225 -6
Jamaica 牙买加 JM 1876 -12
Japan 日本 JP 81 +1
Jordan 约旦 JO 962 -6
Kampuchea (Cambodia ) 柬埔寨 KH 855 -1
Kazakstan 哈萨克斯坦 KZ 327 -5
Kenya 肯尼亚 KE 254 -5
Korea 韩国 KR 82 +1
Kuwait 科威特 KW 965 -5
Kyrgyzstan 吉尔吉斯坦 KG 331 -5
Laos 老挝 LA 856 -1
Latvia 拉脱维亚 LV 371 -5
Lebanon 黎巴嫩 LB 961 -6
Lesotho 莱索托 LS 266 -6
Liberia 利比里亚 LR 231 -8
Libya 利比亚 LY 218 -6
Liechtenstein 列支敦士登 LI 423 -7
Lithuania 立陶宛 LT 370 -5
Luxembourg 卢森堡 LU 352 -7
Macao 澳门 MO 853 0
Madagascar 马达加斯加 MG 261 -5
Malawi 马拉维 MW 265 -6
Malaysia 马来西亚 MY 60 -0.5
Maldives 马尔代夫 MV 960 -7
Mali 马里 ML 223 -8
Malta 马耳他 MT 356 -7
Mariana Is 马里亚那群岛 1670 +1
Martinique 马提尼克 596 -12
Mauritius 毛里求斯 MU 230 -4
Mexico 墨西哥 MX 52 -15
Moldova Republic of 摩尔多瓦 MD 373 -5
Monaco 摩纳哥 MC 377 -7
Mongolia 蒙古 MN 976 0
Montserrat Is 蒙特塞拉特岛 MS 1664 -12
Morocco 摩洛哥 MA 212 -6
Mozambique 莫桑比克 MZ 258 -6
Namibia 纳米比亚 NA 264 -7
Nauru 瑙鲁 NR 674 +4
Nepal 尼泊尔 NP 977 -2.3
Netheriands Antilles 荷属安的列斯 599 -12
Netherlands 荷兰 NL 31 -7
New Zealand 新西兰 NZ 64 +4
Nicaragua 尼加拉瓜 NI 505 -14
Niger 尼日尔 NE 227 -8
Nigeria 尼日利亚 NG 234 -7
North Korea 朝鲜 KP 850 +1
Norway 挪威 NO 47 -7
Oman 阿曼 OM 968 -4
Pakistan 巴基斯坦 PK 92 -2.3
Panama 巴拿马 PA 507 -13
Papua New Cuinea 巴布亚新几内亚 PG 675 +2
Paraguay 巴拉圭 PY 595 -12
Peru 秘鲁 PE 51 -13
Philippines 菲律宾 PH 63 0
Poland 波兰 PL 48 -7
French Polynesia 法属玻利尼西亚 PF 689 +3
Portugal 葡萄牙 PT 351 -8
Puerto Rico 波多黎各 PR 1787 -12
Qatar 卡塔尔 QA 974 -5
Reunion 留尼旺 262 -4
Romania 罗马尼亚 RO 40 -6
Russia 俄罗斯 RU 7 -5
Saint Lueia 圣卢西亚 LC 1758 -12
Saint Vincent 圣文森特岛 VC 1784 -12
Samoa Eastern 东萨摩亚(美) 684 -19
Samoa Western 西萨摩亚 685 -19
San Marino 圣马力诺 SM 378 -7
Sao Tome and Principe 圣多美和普林西比 ST 239 -8
Saudi Arabia 沙特阿拉伯 SA 966 -5
Senegal 塞内加尔 SN 221 -8
Seychelles 塞舌尔 SC 248 -4
Sierra Leone 塞拉利昂 SL 232 -8
Singapore 新加坡 SG 65 +0.3
Slovakia 斯洛伐克 SK 421 -7
Slovenia 斯洛文尼亚 SI 386 -7
Solomon Is 所罗门群岛 SB 677 +3
Somali 索马里 SO 252 -5
South Africa 南非 ZA 27 -6
Spain 西班牙 ES 34 -8
Sri Lanka 斯里兰卡 LK 94 0
St.Lucia 圣卢西亚 LC 1758 -12
St.Vincent 圣文森特 VC 1784 -12
Sudan 苏丹 SD 249 -6
Suriname 苏里南 SR 597 -11.3
Swaziland 斯威士兰 SZ 268 -6
Sweden 瑞典 SE 46 -7
Switzerland 瑞士 CH 41 -7
Syria 叙利亚 SY 963 -6
Taiwan 台湾省 TW 886 0
Tajikstan 塔吉克斯坦 TJ 992 -5
Tanzania 坦桑尼亚 TZ 255 -5
Thailand 泰国 TH 66 -1
Togo 多哥 TG 228 -8
Tonga 汤加 TO 676 +4
Trinidad and Tobago 特立尼达和多巴哥 TT 1809 -12
Tunisia 突尼斯 TN 216 -7
Turkey 土耳其 TR 90 -6
Turkmenistan 土库曼斯坦 TM 993 -5
Uganda 乌干达 UG 256 -5
Ukraine 乌克兰 UA 380 -5
United Arab Emirates 阿拉伯联合酋长国 AE 971 -4
United Kiongdom 英国 GB 44 -8
United States of America 美国 US 1 -13
Uruguay 乌拉圭 UY 598 -10.3
Uzbekistan 乌兹别克斯坦 UZ 233 -5
Venezuela 委内瑞拉 VE 58 -12.3
Vietnam 越南 VN 84 -1
Yemen 也门 YE 967 -5
Yugoslavia 南斯拉夫 YU 381 -7
Zimbabwe 津巴布韦 ZW 263 -6
Zaire 扎伊尔 ZR 243 -7
Zambia 赞比亚 ZM 260 -6
代码操作
void MainWindow::readTxtFile()
{m_strCode.clear();m_strCountry.clear();//读取txt文件的内容QString temp = QString(" a b d ");QString strTemp = temp.trimmed();//去掉前后空格qDebug() << "MainWindow::readTxtFile===============temp==" << temp << strTemp;QFile file("D:\\documents\\countryCode.txt");if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){qDebug() << "open file error=================" << file.fileName();file.close();return;}//QString strAll = file.readAll();//一次读取所有//qDebug() << "MainWindow::readTxtFile========strAll=========" << strAll;//QTextStream textStream(&file); //用文本流读取文件//QString strStream = textStream.readAll();//QString strStream = textStream.readLine();int count = 0;while (!file.atEnd()){++count;QString strReadLine = file.readLine();//一行一行读取QStringList strList = strReadLine.split("\t");int nListCount = strList.size();if(nListCount != 5){qDebug() << "line=========" << count << "=======format error======";break;}//qDebug() << count << " strReadLine=========" << strReadLine << " list.size=" << strList << nListCount;//第1个字段是国家,第4个字段是区号QString country = strList[0].trimmed();//去掉前后空格QString code = "+" + strList[3].trimmed();//去掉前后空格//qDebug() << count << "country= " << country << " code= " << code;m_strCountry.append(country);m_strCode.append(code);// for(int i = 0; i < nListCount; ++i)// {// qDebug() <<"strList[" << i << "]=" << strList[i];// }qDebug() << endl;}file.close();
}void MainWindow::slotCreateXML()
{QFile file("D:\\documents\\countryCode.xml");if(!file.open(QFile::WriteOnly|QFile::Truncate))//可以用QIODevice,Truncate表示清空原来的内容{qDebug() << "create XML file error=================";return;}QDomDocument doc;//写入xml头部QDomProcessingInstruction instruction;//添加处理命令instruction = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");doc.appendChild(instruction);//添加根节点QDomElement root = doc.createElement("root");doc.appendChild(root);for(int i = 0; i < m_strCountry.size(); i++){//if(10 == i)// break;//添加第一个子节点及其子元素QDomElement node = doc.createElement("countryCode");node.setAttribute("id", i);//方式一:创建属性 其中键值对的值可以是各种类型/*//方式二:创建属性 值必须是字符串QDomAttr type = doc.createAttribute("type");time.setValue("string");node.setAttributeNode(type);*/node.setAttribute("type", "string");//创建子元素QDomElement title = doc.createElement("country");QDomText text;//设置括号标签中间的值text = doc.createTextNode(m_strCountry.at(i));node.appendChild(title);title.appendChild(text);//创建第2个子元素title = doc.createElement("code");text = doc.createTextNode(m_strCode.at(i));node.appendChild(title);title.appendChild(text);root.appendChild(node);}//输出到文件QTextStream outStream(&file);doc.save(outStream, 4);//缩进4格file.close();
}void MainWindow::slotReadXML()
{QFile file("D:\\documents\\countryCode.xml");if(!file.open(QFile::ReadOnly))//可以用QIODevice{qDebug() << "open XML file error=================";return;}QDomDocument doc;if(!doc.setContent(&file)){file.close();return;}file.close();QDomElement root=doc.documentElement(); //返回根节点qDebug()<<root.nodeName();QDomNode node=root.firstChild(); //获得第一个子节点while(!node.isNull()) //如果节点不空{if(node.isElement()) //如果节点是元素{QDomElement element =node.toElement();//节点信息qDebug() << element.tagName() << " "<< element.attribute("id") << " " << element.attribute("type");QDomNodeList list = element.childNodes();for(int i = 0; i < list.count(); i++) //遍历子元素{QDomNode node = list.at(i);if(node.isElement())qDebug() << node.nodeName() << ": " << node.toElement().text();}}node=node.nextSibling(); //下一个兄弟节点,nextSiblingElement()是下一个兄弟元素,都差不多}
}void MainWindow::slotAddXML()
{QFile file("D:\\documents\\countryCode.xml");if(!file.open(QFile::ReadOnly))//可以用QIODevice{qDebug() << "open XML file error=================";return;}//添加一个一级子节点以及元素QDomDocument doc;if(!doc.setContent(&file)){file.close();return;}file.close();QDomElement root = doc.documentElement();for(int i = 10; i < m_strCountry.size(); ++i){QDomElement node = doc.createElement("countryCode");//创建结点node.setAttribute("id", i);//设置属性node.setAttribute("type", "string");//添加子元素QDomElement title = doc.createElement("country");QDomText text = doc.createTextNode(m_strCountry.at(i));//设置内容node.appendChild(title);//添加标题title.appendChild(text);//标题加内容//添加第二个元素title = doc.createElement("code");text = doc.createTextNode(m_strCode.at(i));node.appendChild(title);title.appendChild(text);root.appendChild(node);//添加节点}//先读进来,再重写,如果不用truncate就是在后面追加内容,就达不到效果了if(!file.open(QFile::WriteOnly|QFile::Truncate))return;//输出到文件QTextStream outStream(&file);doc.save(outStream, 4);//缩进4格file.close();
}void MainWindow::slotModifyXML()//修改字段或添加节点或添加属性
{QFile file("D:\\documents\\countryCode.xml");if(!file.open(QFile::ReadOnly)){qDebug() << "slotModifyXML open XML file error=================";return;}//更新一个标签项,如果知道xml的结构,直接定位到那个标签上定点更新//或者用遍历的方法去匹配tagname或者attribut,value来更新QDomDocument doc;if(!doc.setContent(&file)){file.close();return;}file.close();QDomElement root = doc.documentElement();QDomNodeList list = root.elementsByTagName("countryCode");QDomNode node = list.at(list.size() - 1).firstChild(); //定位到最后个一级子节点的子元素QDomNode oldnode = node.firstChild(); //标签之间的内容作为节点的子节点出现,当前是Pride and Projudicenode.firstChild().setNodeValue("GuoJia");QDomNode newnode = node.firstChild();node.replaceChild(newnode, oldnode);//替换if(!file.open(QFile::WriteOnly|QFile::Truncate))return;//输出到文件QTextStream outStream(&file);doc.save(outStream, 4); //缩进4格file.close();
}void MainWindow::slotDeleteXML()
{QFile file("D:\\documents\\countryCode.xml");if(!file.open(QFile::ReadOnly)){qDebug() << "slotDeleteXML open XML file error=================";return;}//删除一个一级子节点及其元素,外层节点删除内层节点于此相同QDomDocument doc;if(!doc.setContent(&file)){file.close();return;}file.close(); //一定要记得关掉啊,不然无法完成操作QDomElement root=doc.documentElement();QDomNodeList list=doc.elementsByTagName("countryCode"); //由标签名定位for(int i = 0; i < list.count(); i++){QDomElement element = list.at(i).toElement();if(element.attribute("id") == "191") //以属性名定位,类似于hash的方式{root.removeChild(list.at(i));break;//删除最后一个元素}}if(!file.open(QFile::WriteOnly|QFile::Truncate))return;//输出到文件QTextStream outStream(&file);doc.save(outStream, 4); //缩进4格file.close();
}
创建的xml文件格式如下
参考
http://blog.chinaunix.net/uid-24219701-id-4050520.html
https://blog.csdn.net/u012234115/article/details/43203001
Qt操作XML文件(创建,读,写,修改,添加,删除)相关推荐
- CDATA C#操作XML(无命名空间),添加/删除/编辑节点
xml文件<?xml version="1.0" encoding="utf-8"?> <Books> <Book ID=&quo ...
- QT操作XML文件打开了doc.setContent(file)失败原因
1.首先要知道XML文件格式,必须要有一个根节点,如果没有访问会出错 2.相对路径.绝对路径.资源路径都行,如果你路径不对,你Qfile是读取不了文件的,到不了doc.setContent(& ...
- [QT操作XML]QT读写XML文件,QT修改XML文件
[QT操作XML]QT读写XML文件 XML简介 QT操作XML,写入.读取.修改 XML效果演示 XML简介 概念:Extensible Markup Language 可扩展标记语言(可扩展:标签 ...
- 写了一个操作XML文件的类
一个操作XML文件的类..部份功能在完善中~~~~ using System; using System.Collections.Generic; using System.Text; using S ...
- 02_Android写xml文件和读xml文件
新建Android项目 编写AndroidManifest.xml,使本Android项目具有单元测试功能和写外设的权限. <?xml version="1.0" en ...
- 杭电Matlab与仿真-MATLAB基本语法(二)-数据文件的读/写操作
数据文件的读/写操作 实验目的 实验内容与要求 实验程序与结果 实验目的 学会matlab数据输入与输出基本操作: 熟悉matlab各种文件的输入输出方法,了解常用的图片及音频文件的输入输出: 掌握用 ...
- C#实用教程-操作xml文件
C#实用教程-操作xml文件 C#实用教程-操作xml文件 引言:什么是xml文件 Xml的特征 Xml的格式 与HTML的区别 对Xml进行操作 读取xml文件: 当前xml文件内容如下: 创建xm ...
- JAVA操作xml文件
参考:java操作xml方法,总有适合你的 XML技术在Java开发中的应用 1.简介 xml: extensible Markup Language 1.1使用场景: 不同的系统之间交互时使用xml ...
- Asp.Net 操作XML文件的增删改查 利用GridView
不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...
最新文章
- 车联网APP,安全设施薄弱的山寨品
- Linux下的各文件夹的作用(转)
- 【CF1199 D,E, F】Welfare State // Matching vs Independent Set // Rectangle Painting 1
- 第二轮冲刺-Runner站立会议08
- 详解http和https的区别
- [APIO / CTSC2007]数据备份 --- 贪心
- 数据库中union和union all的区别
- 在Ubuntu18.04上安装Nvidia驱动
- Go Elasticsearch 更新快速入门
- 2021“数维杯”国际大学生数学建模竞赛B题思路
- Android 压缩解压zip文件
- php爬虫框架phpfetcher,TrackRay:打造一款自己的渗透测试框架
- Java内存模型详解
- JavaScript(6):回调函数
- 2014联通见习感悟
- HDMI接口的HPD问题
- 高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
- 博士第一年,要把这些计算机基础课程学好(附教程)
- 利用Matlab将任意曲线旋转任意角度
- The installer has encountered an unexpected error installing this package.this may indicate a proble