您当前的位置: 首页 > 

XML读与写

发布时间:2018-01-26 15:49:40 ,浏览量:0

  • XML读与写
    • 1.1 XML文档格式
      •   1.1.1 XML, EXtensible Markup Language 可扩展标记语言。
      •   1.1.2 XML声明
      •   1.1.3 XML语法
      •   1.1.3 XML的元素
    • 二 以工程为例
      •   2.1 XML的写入
      •   2.1 XML的读取。
XML读与写 1.1 XML文档格式   1.1.1 XML, EXtensible Markup Language 可扩展标记语言。

   实际上,XML的应用一般比较简单,还够不上 一个“语言”的级别。XML是一个数据格式,符合这种格式的文件后 缀名通常为*.xml    优点:可读性强!    缺点:解析费时、占用空间大、效率低!

  1.1.2 XML声明

   XML文档的第一行必须是声明语句:例如,

 version 版本号:总是1.0
 encoding 文字编码:GBK, UTF-8等
  1.1.3 XML语法
 <root> <host> nihao.cn host> <port> 1230 port> root> 

   简言之,XML文档是一个由元素构成的树型结 构。root,host, port都是元素

  1.1.3 XML的元素

   示例:

"1001" page="1">qixiaofan... 1. 名称Name:必须配对!shaofashaofa

   以下写法不对:

<NAME> qixiaofan name> 

    NAME与name不配对

二 以工程为例

    在此之前,先介绍一个很好用的库,tinyxml。

   tinyxml: 一个小巧的xml库,可以生成和解析XML文档。免费开源,可以直接将源码加到项目中,适合多种平台。     可以从tinyxml作者的官网下载,传送门。     也可以从CSDN中下载 ,传送门。

  2.1 XML的写入

   目标写入的文件内容: 这里写图片描述

函数实现:

struct Note
{ int id; char when[32]; char who[32]; char what[128];
}; vector notes; int save()
{
    TiXmlDocument xml_doc;
    xml_doc.LinkEndChild(new TiXmlDeclaration( "1.0", "GBK", "" ));

    TiXmlElement * xml_root = new TiXmlElement("root");
    xml_doc.LinkEndChild(xml_root);

    TiXmlElement* xml_NoteList = new TiXmlElement("NoteList");
    xml_root->LinkEndChild(xml_NoteList); // 添加host元素 for(int i=0; inew TiXmlElement("Note");
        xml_NoteList->LinkEndChild(xml_Note);

        AfTinyXml::addChild(xml_Note, "id", r.id);
        AfTinyXml::addChild(xml_Note, "when", r.when);
        AfTinyXml::addChild(xml_Note, "who", r.who);
        AfTinyXml::addChild(xml_Note, "what", r.what);
    } //第一种方法:是将数据保存到本地 xml_doc.SaveFile("example02b.xml"); 第二种方法:是将数据保存成string //string txt; //txt << xml_doc; //cout << txt << endl; return 0;
} void addNote(int id, const char* when, const char* who, const char* what)
{
    Note n;
    n.id = id; strcpy(n.when, when); strcpy(n.who, who); strcpy(n.what, what);
    notes.push_back(n);
} int main()
{
    addNote(1, "2018-1-26 1:00", "Qi", "睡觉");
    addNote(2, "2019-1-21 2:00", "Ge", "打豆豆");
    addNote(3, "2020-2-20 5:00", "Yong", "看书");

    save(); return 0;
}
  2.1 XML的读取。

   读取的文件和上述的写入文件一致。    函数实现如下:

struct Note
{ int id; char when[32]; char who[32]; char what[128];
}; vector notes; int main()
{ // 解析xml TiXmlDocument xml_doc; if(!xml_doc.LoadFile("example02b.xml"))
    { return -1;
    } // 根节点 TiXmlElement* xml_root = xml_doc.RootElement(); if (NULL == xml_root)
    { return -1;
    } // 获取元素的文本与属性 TiXmlElement* xml_NoteList = xml_root->FirstChildElement("NoteList"); if(xml_NoteList)
    {
        TiXmlElement* xml_Note = xml_NoteList->FirstChildElement("Note"); while(xml_Note)
        { // 取得子元素的文本 int id = AfTinyXml::childAsInt(xml_Note, "id"); string when = AfTinyXml::childAsText(xml_Note, "when"); string who = AfTinyXml::childAsText(xml_Note, "who"); string what = AfTinyXml::childAsText(xml_Note, "what"); // 保存到列表 Note r;
            r.id = id; strcpy(r.when, when.c_str()); strcpy(r.who, who.c_str()); strcpy(r.what, what.c_str());
            notes.push_back(r); // 下一个兄弟元素 xml_Note = xml_Note->NextSiblingElement("Note");
        }
    } return 0;
}

    至此,XML文件的简单用法便已经总结好了。对于更复杂的读入和写入操作,需要再进一步研究XML方可实现。     封装好的项目工程文件(包括读入和写入操作,以及XML文件的PPT讲解):传送门。

  个人公众号:

这里写图片描述
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    107766博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0499s