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文件(创建,读,写,修改,添加,删除)相关推荐

  1. CDATA C#操作XML(无命名空间),添加/删除/编辑节点

    xml文件<?xml version="1.0" encoding="utf-8"?> <Books> <Book ID=&quo ...

  2. QT操作XML文件打开了doc.setContent(file)失败原因

    1.首先要知道XML文件格式,必须要有一个根节点,如果没有访问会出错 2.相对路径.绝对路径.资源路径都行,如果你路径不对,你Qfile是读取不了文件的,到不了doc.setContent(& ...

  3. [QT操作XML]QT读写XML文件,QT修改XML文件

    [QT操作XML]QT读写XML文件 XML简介 QT操作XML,写入.读取.修改 XML效果演示 XML简介 概念:Extensible Markup Language 可扩展标记语言(可扩展:标签 ...

  4. 写了一个操作XML文件的类

    一个操作XML文件的类..部份功能在完善中~~~~ using System; using System.Collections.Generic; using System.Text; using S ...

  5. 02_Android写xml文件和读xml文件

     新建Android项目 编写AndroidManifest.xml,使本Android项目具有单元测试功能和写外设的权限. <?xml version="1.0" en ...

  6. 杭电Matlab与仿真-MATLAB基本语法(二)-数据文件的读/写操作

    数据文件的读/写操作 实验目的 实验内容与要求 实验程序与结果 实验目的 学会matlab数据输入与输出基本操作: 熟悉matlab各种文件的输入输出方法,了解常用的图片及音频文件的输入输出: 掌握用 ...

  7. C#实用教程-操作xml文件

    C#实用教程-操作xml文件 C#实用教程-操作xml文件 引言:什么是xml文件 Xml的特征 Xml的格式 与HTML的区别 对Xml进行操作 读取xml文件: 当前xml文件内容如下: 创建xm ...

  8. JAVA操作xml文件

    参考:java操作xml方法,总有适合你的 XML技术在Java开发中的应用 1.简介 xml: extensible Markup Language 1.1使用场景: 不同的系统之间交互时使用xml ...

  9. Asp.Net 操作XML文件的增删改查 利用GridView

    不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...

最新文章

  1. 车联网APP,安全设施薄弱的山寨品
  2. Linux下的各文件夹的作用(转)
  3. 【CF1199 D,E, F】Welfare State // Matching vs Independent Set // Rectangle Painting 1
  4. 第二轮冲刺-Runner站立会议08
  5. 详解http和https的区别
  6. [APIO / CTSC2007]数据备份 --- 贪心
  7. 数据库中union和union all的区别
  8. 在Ubuntu18.04上安装Nvidia驱动
  9. Go Elasticsearch 更新快速入门
  10. 2021“数维杯”国际大学生数学建模竞赛B题思路
  11. Android 压缩解压zip文件
  12. php爬虫框架phpfetcher,TrackRay:打造一款自己的渗透测试框架
  13. Java内存模型详解
  14. JavaScript(6):回调函数
  15. 2014联通见习感悟
  16. HDMI接口的HPD问题
  17. 高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
  18. 博士第一年,要把这些计算机基础课程学好(附教程)
  19. 利用Matlab将任意曲线旋转任意角度
  20. The installer has encountered an unexpected error installing this package.this may indicate a proble

热门文章

  1. adb shell 连接两个相同设备
  2. Oracle报“无监听程序”解决方案
  3. 计算机专业十六字口号,大学运动会十六字口号(精选50句)
  4. linux软中断和消息队列结合,传统UNIX进程间通信内核实现概要
  5. Multisim、面包板、示波器的使用
  6. 使用adb命令查看手机日志
  7. 【总目录4】CC++、OpenCV、Qt、单片机总结大全
  8. matlab ndims 图像对称,MATLAB实现将图像转换为素描(简笔画)风格
  9. 世事一场大梦,人生几度秋凉?
  10. 【数电基础】——逻辑代数运算