C/C++怎么生成XML文件呢?
其实是有很多开源的库可以用的。这里我们用的是minixml库来操作XML文件(这里我们在Ubuntu上操作)
这里有一个 下载地址:https://github.com/michaelrsweet/mxml/releases
minixml库的安装步骤:
1../configure
2.sudo make install
先来看看 我们需要生成的文件格式
<?xml version="1.0" encoding="UTF-8"?>
<people>
<object>
<name report="yes">libero</name>
<age year="1998">22</age>
<sex>男</sex>
</object>
<object>
<name report="yes">rock</name>
<age year="1980">40</age>
<sex>男</sex>
</object>
</people>
代码demo
#include <iostream>
#include <mxml.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
using namespace std;
int main(int argc, const char* argv[])
{
mxml_node_t* root = mxmlNewXML("1.0");
mxml_node_t* people = mxmlNewElement(root, "people");
mxml_node_t* object = mxmlNewElement(people, "object");
mxml_node_t* name = mxmlNewElement(object, "name");
mxmlNewText(name, 0, "libero");
mxmlElementSetAttr(name, "report", "yes");
mxml_node_t* age = mxmlNewElement(object, "age");
mxmlNewText(age, 0, "22");
mxmlElementSetAttr(age, "year", "1998");
mxml_node_t* sex = mxmlNewElement(object, "sex");
mxmlNewText(sex, 0, "男");
object = mxmlNewElement(people, "object");
name = mxmlNewElement(object, "name");
mxmlNewText(name, 0, "rock");
mxmlElementSetAttr(name, "report", "yes");
age = mxmlNewElement(object, "age");
mxmlNewText(age, 0, "40");
mxmlElementSetAttr(age, "year", "1980");
sex = mxmlNewElement(object, "sex");
mxmlNewText(sex, 0, "男");
FILE* wfp = NULL;
int count = 0;
while(!(wfp = fopen("people.xml", "w")) && count < 5){
fprintf(stderr, "people open error!!! %d\n", ++count);
sleep(1);
}
do{
if(count == 5){
break;
}
mxmlSaveFile(root, wfp, MXML_NO_CALLBACK);
fclose(wfp);
}while(0);
mxmlDelete(root);
return 0;
}
效果就是这个吊样
大家肯定会问, 为什么不像上面那样呢?
这个 是它这个库中函数可能没有对换行符和制表符进行更进一步的处理,这下脑袋大了那怎么办呢?
毕竟这样看逻辑层次有些太不清晰了
我们可以通过工具清晰的查看这个 xml文件标签的层次结构
这个软件叫 XMLView
地址:https://xml-viewer.soft32.com/free-download/?nc&dm=3