libxml使用
xml文件创建,读取,修改
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include "print.h"
#include "xmltools.h"
int main(void) {
/**
* libxml2库调用
*/
LibXml();
}
/**
*
① 用xmlReadFile函数读入一个文件,并返回一个文档指针doc。
② 用xmlDocGetRootElement函数得到根节点curNode。
③ 此时curNode->xmlChildrenNode就是根节点的首个子节点,该子节点的兄弟节点可用next指针进行轮询。
④ 轮询所有子节点,找到所需的节点,用xmlNodeGetContent取出其内容。
⑤ 用properties查找含有某个属性的节点,属性列表指针xmlAttrPtr将指向该节点的属性列表。
⑥ 取出该节点的属性,用xmlGetProp取出其属性值。
⑦ xmlFreeDoc函数关闭文档指针,并清除本文档中所有节点动态申请的内存。
*/
void LibXml(){
printf("start %s\n", "NEW libXml ");
/**
* 创建xml
*/
xmlDocPtr doc = NULL;
xmlNodePtr root_node = NULL, node1 = NULL;
xmlNodePtr node2 = NULL,node2_p1 = NULL,node2_p2 = NULL;
xmlNodePtr node3 = NULL,node3_p1 = NULL,node3_p2 = NULL;
doc = xmlNewDoc(BAD_CAST "1.0"); // create a new xml document.
root_node = xmlNewNode(NULL, BAD_CAST "时序文件"); // create a root node.
/**
* root根节点
*/
xmlDocSetRootElement(doc, root_node);
/**
* 子节点,不带参数
*/
xmlNewChild(root_node, NULL, BAD_CAST "时序", BAD_CAST "test 123 这是一个时序文件");
/**
*子节点带参数
*/
node1 = xmlNewChild(root_node, NULL, BAD_CAST "时序",NULL);
xmlNewProp(node1, BAD_CAST "版本", BAD_CAST "V1.0.0.1");
/**
*子节点多项参数
*/
node2 = xmlNewNode(NULL, BAD_CAST "时序");
xmlNewProp(node2, BAD_CAST "时序位号", BAD_CAST "001");
node2_p1 = xmlNewChild(node2, NULL, BAD_CAST "电机", BAD_CAST "采样水平电机");
xmlNewProp(node2_p1, BAD_CAST "开始时间", BAD_CAST "00.00.01");
xmlNewProp(node2_p1, BAD_CAST "结束时间", BAD_CAST "00.05.00");
xmlNewProp(node2_p1, BAD_CAST "方向", BAD_CAST "0");
xmlNewProp(node2_p1, BAD_CAST "步数", BAD_CAST "500");
node2_p2 = xmlNewChild(node2, NULL, BAD_CAST "电磁阀", BAD_CAST "1号阀");
xmlNewProp(node2_p2, BAD_CAST "开始时间", BAD_CAST "00.00.01");
xmlNewProp(node2_p2, BAD_CAST "结束时间", BAD_CAST "00.03.00");
/**
*子节点多项参数2
*/
node3 = xmlNewNode(NULL, BAD_CAST "时序");
xmlNewProp(node3, BAD_CAST "时序位号", BAD_CAST "002");
node3_p1 = xmlNewChild(node3, NULL, BAD_CAST "电机", BAD_CAST "采样纵向电机");
xmlNewProp(node3_p1, BAD_CAST "开始时间", BAD_CAST "00.01.01");
xmlNewProp(node3_p1, BAD_CAST "结束时间", BAD_CAST "00.06.00");
xmlNewProp(node3_p1, BAD_CAST "方向", BAD_CAST "复位");
xmlNewProp(node3_p1, BAD_CAST "步数", BAD_CAST "666")