使用libxml2库修改XML文件内容

发布时间 2023-12-27 15:51:44作者: 苏卡
/*
//引入libxml2库头文件和相关函数库。
#include <libxml/parser.h>  ///usr/include/libxml2/libxml/parser.h
#include <libxml/tree.h>
#include <libxml/xmlmemory.h>
*/
static
void modifyXml(Webs *wp){ char *json_string = wp->input.servp; cJSON *cjson = cJSON_Parse(json_string); if (cjson == NULL) { printf("Error before: [%s]\n", cJSON_GetErrorPtr()); return 1; } // 获取元素的值 cJSON *tag = cJSON_GetObjectItem(cjson, "tag"); cJSON *value = cJSON_GetObjectItem(cjson, "value"); // 打印元素的值 //printf("tag: %s\n", cJSON_GetStringValue(tag)); //printf("value: %s\n", cJSON_GetStringValue(value)); //定义需要修改的XML文件路径和节点名称 char *xmlFilePath = FILENAME; char *xmlNodeName = cJSON_GetStringValue(tag);//需要修改的节点名称 //解析XML文件并获取根节点。 xmlDocPtr doc; xmlNodePtr cur; doc = xmlParseFile(xmlFilePath); if (doc == NULL) { fprintf(stderr, "Failed to parse xml file.\n"); return; } //cur = xmlDocGetRootElement(doc); if (cur == NULL) { fprintf(stderr, "Empty xml file.\n"); xmlFreeDoc(doc); return; } //遍历XML文件中的所有节点,找到需要修改的节点 cur = cur->xmlChildrenNode; while (cur != NULL) { //xmlStrcmp对两个字符串进行比较,然后返回比较结果 if ((xmlStrcmp(cur->name, (const xmlChar *)xmlNodeName)==0)) { // 找到需要修改的节点 // 在这里进行修改操作 xmlNodeSetContent(cur, (const xmlChar *)cJSON_GetStringValue(value)); } cur = cur->next; } //保存修改后的XML文件。 xmlSaveFormatFileEnc(xmlFilePath, doc, "UTF-8", 1); // 释放cJSON对象的内存 cJSON_Delete(cjson); }