一、创建XML文档的步骤
- 【xmlNewDoc】 创建一个文档指针pdoc
- 【xmlNewNode】创建一个节点proot,用来代表根节点
- 【xmlDocSetRootElement】将proot这个节点设置为根节点
- 【xmlNewChild】添加proot的子节点或者孙子结点,并设置好所有节点的内容和属性
- 【xmlSaveFile】保存xml文件
- 【xmlFreeDoc】最后关闭文档指针,并释放相应内存
二、目标xml结构
<MyLove>
<name>JJLin</name>
<birth>19810327</birth>
<songs>
<1>Always Online</1>
<2>I Pray For You</2>
<3>One Shot</3>
</songs>
</MyLove>
三、实现代码
1.根据xml格式,定义结构体
typedef struct mylove{
char name[NAMELEN];
long birth;
char song1[NAMELEN];
char song2[NAMELEN];
char song3[NAMELEN];
}mylove_t;
2.创建mylove.xml函数
int create_demo_xml(mylove_t love)
{
xmlDocPtr pdoc = NULL;
xmlNodePtr proot = NULL,songsnode = NULL;
// 创建一个文档指针pdoc
pdoc = xmlNewDoc(BAD_CAST "1.0");
// 创建一个节点指针proot
proot = xmlNewNode(NULL, BAD_CAST "mylove");
// 设置proot这个节点作为根节点
xmlDocSetRootElement(pdoc, proot);
// 在根节点中直接创建节点
xmlNewStrChild(proot,NULL,"name",love.name);
xmlNewLongChild(proot,NULL,"birth",love.birth);
// 创建一个节点,设置内容和属性
songsnode = xmlNewNode(NULL,BAD_CAST "songs");
xmlNewStrChild(songsnode,NULL,"1",love.song1);
xmlNewStrChild(songsnode,NULL,"2",love.song2);
xmlNewStrChild(songsnode,NULL,"3",love.song3);
// 然后将songsnode节点加入根节点
xmlAddChild(proot,songsnode);
// 存储xml文档
xmlSaveFormatFile("mylove.xml", pdoc, 1);
// 释放文档内节点动态申请的内存
xmlFreeDoc(pdoc);
return 0;
}
3.main函数
int main(int argc, char **argv) {
int ret = 0;
mylove_t love = {
"JJLin",
19810327,
"Always Online",
"I Pray For You",
"One Shot",
};
// 这里可以加返回值判断
ret = create_demo_xml(love);
if(ret){
fprintf(stderr, "create mylove.xml failed\n");
}else{
fprintf(stderr, "create mylove.xml success\n");
}
return 0;
}
四、执行结果