C/C++生成XML文件

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

猜你喜欢

转载自blog.csdn.net/qq_44065088/article/details/107351643