欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++生成和解析XML文件

程序员文章站 2022-05-22 16:45:39
1.xml 指可扩展标记语言(EXtensible Markup Language) 2.xml 是一种标记语言,类似html 3.xml 的设计宗旨是传输数据,而非显示数据 4.xml 标签没有被预定义。需要自行定义标签 XML与HTML区别 1.xml 不是 html 的替代。 2.xml 和 ......

1.xml 指可扩展标记语言(extensible markup language)
2.xml 是一种标记语言,类似html
3.xml 的设计宗旨是传输数据,而非显示数据
4.xml 标签没有被预定义。需要自行定义标签

xml与html区别

1.xml 不是 html 的替代。
2.xml 和 html 为不同的目的而设计:
3.xml 被设计为传输和存储数据,其焦点是数据的内容。
4.html 被设计用来显示数据,其焦点是数据的外观。
5.html 旨在显示信息,而 xml 旨在传输信息。

第三方库

xml第三方解析库,选用tinyxml,tinyxml也是一个开源的解析xml解析库,使用简单正如其名,用于c++开发,支持windows和linux。tinyxml通过dom模型遍历和分析xml。
官网地址:

生成xml文件

    tixmldocument xmldocument;
 
    // 添加xml声明
    xmldocument.linkendchild(new tixmldeclaration( "1.0", "gbk", "" ));
 
    // 添加根元素
    tixmlelement * xmlroot = new tixmlelement("root");
    xmldocument.linkendchild(xmlroot);
 
    //根元素下添加子元素1
    tixmlelement* xmlchild1 = new tixmlelement("name");
    xmlroot->linkendchild(xmlchild1);
    xmlchild1->linkendchild(new tixmltext("woniu"));
    xmlchild1->setattribute("id", "0001");//设置属性
 
 
    //根元素下添加子元素2
    tixmlelement* xmlchild2 = new tixmlelement("student");
    xmlroot->linkendchild(xmlchild2);
 
    tixmlelement* xmlchild2_01 = new tixmlelement("name");
    xmlchild2->linkendchild(xmlchild2_01);
    xmlchild2_01->linkendchild(new tixmltext("woniu201"));
    
    tixmlelement* xmlchild2_02 = new tixmlelement("classes");
    xmlchild2->linkendchild(xmlchild2_02);
    xmlchild2_02->linkendchild(new tixmltext("86"));
 
    //保存xml文件
    xmldocument.savefile("woniu.xml");

生成xml如下:

C++生成和解析XML文件

解析xml文件

    tixmldocument xmldocument;
    if (!xmldocument.loadfile("woniu.xml"))
    {
        return -1;
    }
 
    //根节点
    tixmlelement* xmlroot = xmldocument.rootelement();
    if (xmlroot == null)
    {
        return -1;
    }
 
    //获取子节点信息1
    tixmlelement* xmlnode1name = xmlroot->firstchildelement("name");
    const char* node1name = xmlnode1name->gettext();
    const char* node1attid = xmlnode1name->attribute("id");
 
    //获取子节点信息2
    tixmlelement* xmlnode2stu = xmlroot->firstchildelement("student");
    tixmlelement* xmlnode2_name = xmlnode2stu->firstchildelement("name");
    tixmlelement* xmlname2_classes = xmlnode2stu->firstchildelement("classes");
    const char* node2name = xmlnode2_name->gettext();
    const char* node2classes = xmlname2_classes->gettext();

关注下面公众号,回复"101"获取源码
C++生成和解析XML文件