C语言学习之路-libxml使用(创建读取修改)

这篇博客介绍了如何使用C语言中的libxml库来创建、读取和修改XML文件。通过示例代码展示了如何添加节点、设置属性以及读取和修改节点内容。最后,博主还提供了一个经过修改后的XML文件示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值