当前位置: 首页 > news >正文

C 语言 xml 库的使用

        在C语言中,可以使用多种库来处理XML文件,其中最常用的是libxml2库。libxml2是一个用于解析XML和HTML文档的C语言库,它提供了许多功能,包括解析XML文档、创建XML文档、验证XML文档等等。下面是一个简单的示例,演示读取libxml2库来解析XML文件。

1,读取XML文件

#include <stdio.h>  
#include <libxml/parser.h>  
#include <libxml/tree.h>  void print_element_names(xmlNode * a_node) {  xmlNode *cur_node = NULL;  for (cur_node = a_node; cur_node; cur_node = cur_node->next) {  if (cur_node->type == XML_ELEMENT_NODE) {  printf("node type: Element, name: %s\n", cur_node->name);  }  print_element_names(cur_node->children);  }  
}  int main(int argc, char **argv) {  xmlDoc *doc = NULL;  xmlNode *root_element = NULL;  doc = xmlReadFile(argv[1], NULL, 0);  if (doc == NULL) {  printf("error: could not parse file %s\n", argv[1]);  exit(-1);  }  root_element = xmlDocGetRootElement(doc);  print_element_names(root_element);  xmlFreeDoc(doc);  xmlCleanupParser();  return 0;  
}

        这个示例程序读取一个XML文件,并打印出所有元素的名称。它使用xmlReadFile函数打开XML文件,然后使用xmlDocGetRootElement获取根元素。接下来,它调用print_element_names函数,递归地遍历XML树,并打印每个元素的名称。最后,释放XML文档和清理libxml2库。

2,写入XML文件

#include <stdio.h>  
#include <libxml/parser.h>  
#include <libxml/tree.h>  int main(int argc, char **argv) {  xmlDocPtr doc = NULL;  xmlNodePtr root_node = NULL, person_node = NULL, name_node = NULL, age_node = NULL;  // 创建XML文档对象  doc = xmlNewDoc(BAD_CAST "1.0");  root_node = xmlNewNode(NULL, BAD_CAST "persons");  xmlDocSetRootElement(doc, root_node);  // 添加Person节点到根节点  person_node = xmlNewNode(NULL, BAD_CAST "Person");  xmlAddChild(root_node, person_node);  name_node = xmlNewNode(NULL, BAD_CAST "name");  xmlAddChild(person_node, name_node);  xmlNewTextChild(name_node, NULL, BAD_CAST "text", BAD_CAST "phinecos");  age_node = xmlNewNode(NULL, BAD_CAST "age");  xmlAddChild(person_node, age_node);  xmlNewTextChild(age_node, NULL, BAD_CAST "text", BAD_CAST "22");  // 将XML文档写入文件  int result = xmlSaveFormatFileEnc(argv[1], doc, "UTF-8", 1);  if (result == -1) {  printf("error: could not write file %s\n", argv[1]);  exit(-1);  }  xmlFreeDoc(doc);  xmlCleanupParser();  return 0;  
}

        这个示例程序创建一个XML文档,包含一个"persons"根节点和一个"Person"子节点。在"Person"节点下,它添加了"name"和"age"子节点,并设置它们的文本内容分别为"phinecos"和"22"。最后,它将XML文档写入指定的文件中。

在Linux上,可以使用以下命令:

shell

gcc -o program program.c -lxml2

其中,program.c是源代码文件,program是编译后的可执行文件。-lxml2选项告诉编译器链接libxml2库。不过这linux环境下,博主没有测试过。

相关文章:

C 语言 xml 库的使用

在C语言中&#xff0c;可以使用多种库来处理XML文件&#xff0c;其中最常用的是libxml2库。libxml2是一个用于解析XML和HTML文档的C语言库&#xff0c;它提供了许多功能&#xff0c;包括解析XML文档、创建XML文档、验证XML文档等等。下面是一个简单的示例&#xff0c;演示读取l…...

群晖(Synology)云备份的方案是什么

群晖云备份方案就是在本地的 NAS 如果出现问题&#xff0c;或者必须需要重做整列的时候&#xff0c;保证数据不丢失。 当然&#xff0c;这些是针对有价值的数据&#xff0c;如果只是电影或者不是自己的拍摄素材文件&#xff0c;其实可以不使用云备份方案&#xff0c;因为毕竟云…...

Flask 中的跨域难题:定义、影响与解决方案深度解析

跨域&#xff08;Cross-Origin&#xff09;是指在浏览器中&#xff0c;一个页面的脚本试图访问另一个页面的内容时发生的安全限制。Flask 作为一种 Web 应用框架&#xff0c;也涉及到跨域问题。本文将详细介绍跨域的定义、影响以及解决方案&#xff0c;涵盖如何在 Flask 中处理…...

汽车IVI中控开发入门及进阶(十二):V4L2视频

前言 汽车中控也被称为车机、车载多媒体、车载娱乐等,其中音频视频是非常重要的部分,比如播放各种格式的音乐文件、播放蓝牙接口的音乐、播放U盘或TF卡中的音视频文件,看起来很简单。如果说音频来源于振动,那么图片图像就是光反射的一种表象。模拟信号表示在空间上是连续…...

gitlab下载安装

1.下载 官网rpm包 gitlab/gitlab-ce - Results in gitlab/gitlab-ce 国内镜像 Index of /gitlab-ce/yum/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 2.安装 rpm -ivh gitlab-ce-16.4.3-ce.0.el7.x86_64.rpm 3.配置 vim /etc/gitlab/gitlab.rb 将 externa…...

Jmeter,提取响应体中的数据:正则表达式、Json提取器

一、正则表达式 1、线程组--创建线程组&#xff1b; 2、线程组--添加--取样器--HTTP请求&#xff1b; 3、Http请求--添加--后置处理器--正则表达式提取器&#xff1b; 4、线程组--添加--监听器--查看结果树&#xff1b; 5、线程组--添加--取样器--调试取样器。 响应体数据…...

【SpringBoot篇】基于布隆过滤器,缓存空值,解决缓存穿透问题 (商铺查询时可用)

文章目录 &#x1f354;什么是缓存穿透&#x1f384;解决办法⭐缓存空值处理&#x1f388;优点&#x1f388;缺点&#x1f38d;代码实现 ⭐布隆过滤器&#x1f38d;代码实现 &#x1f354;什么是缓存穿透 缓存穿透是指在使用缓存机制时&#xff0c;大量的请求无法从缓存中获取…...

Gitlab基础篇: Gitlab docker 安装部署、Gitlab 设置账号密码

文章目录 1、环境准备2、配置1)、初始化2)、修改gitlab配置文件3)、修改docker配置的gitlab默认端口 gitlab进阶配置gitlab 设置账号密码 1、环境准备 安装docker gitlab前确保docker环境&#xff0c;如果没有搭建docker请查阅“Linux docker 安装文档” docker 下载 gitlab容…...

c++常见函数处理

1、clamp clamp&#xff1a;区间限定函数 int64_t a Clamp(a, MIN_VALUE, MAX_VALUE); #include <iomanip> #include <iostream> #include <sstream>int main() {std::cout << "no setw: [" << 42 << "]\n"<&l…...

MYsql第二次作业

目录 问题 解答 1.显示所有职工的基本信息。 2.查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。 3.求出所有职工的人数。 4.列出最高工和最低工资。 5.列出职工的平均工资和总工资。 6.创建一个只有职工号、姓名和参加工作的新表&#xff0c;名为工作日…...

SQLAlchemy 第三篇

使用insert语句 from sqlalchemy import Table, Column, Integer, String, MetaDatametadata_obj MetaData() user_table Table("user_account",metadata_obj,Column("id", Integer, primary_keyTrue),Column("name", String(255)),Column(&q…...

交互过程中影响信息质量好坏的因素

人机交互是指人与计算机之间的交流和互动&#xff0c;而人人交流是指人与人之间的交流和互动。在信息质量方面&#xff0c;人机交互通常更为准确和精确&#xff0c;而人人交流可能存在误解、模糊和歧义。 人机交互的信息传递往往通过明确的界面、符号和指令等方式进行。计算机可…...

服务器上配置jupyter,提示Invalid credentials如何解决

我是按照网上教程在服务器上安装的jupyter以及进行的密码配置&#xff0c;我利用 passwd()这个口令生成的转译密码是"argon...."。按照教程配置jupyter notebook配置文件里面的内容&#xff0c;登陆网页提示"Invalid credentials"。我谷歌得到的解答是&…...

Axure中动态面板使用及轮播图多种登录方式左侧导航栏之案列

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《产品经理如何画泳道图&流程图》 ⛺️ 越努力 &#xff0c;越幸运 目录 一、轮播图简介 1、什么是轮播图 2、轮播图有什么作用 3、轮播图有什么特点 4、轮播图适应范围 5、…...

大数据之旅-问题反思

1.谈谈你对MR执行流程各个阶段的理解&#xff08;提示里面涉及到排序&#xff0c;快速排序或者归并排序知道两种实现形式&#xff09;&#xff1f; 2.hadoop 1.0和hadoop 2.0明显的差异如何理解&#xff1f; hadoop2.0与hadoop1.0区别体现在在架构、性能、功能和组件方面&…...

系统级基础信号知识【Linux】

目录 一&#xff0c;什么是信号 进程面对信号常见的三种反应概述 二&#xff0c;产生信号 1.终端按键产生信号 signal 2. 进程异常产生信号 核心转储 3. 系统调用函数发送信号 kill raise abort 小结&#xff1a; 4. 由软件条件产生 alarm 5. 硬件异常产生信号…...

Excel单元格隐藏如何取消?

Excel工作表中的有些单元格隐藏了数据&#xff0c;如何取消隐藏行列呢&#xff1f;今天分享几个方法给大家 方法一&#xff1a; 选中隐藏的区域&#xff0c;点击右键&#xff0c;选择【取消隐藏】就可以了 方法二&#xff1a; 如果工作表中有多个地方有隐藏的话&#xff0c;…...

Visual Studio(VS)常用快捷键(最详细)

Visual Studio常用快捷键 一、生成&#xff1a;常用快捷键二、调式&#xff1a;常用快捷键三、编辑&#xff1a;常用快捷键四、文件&#xff1a;常用快捷键五、项目&#xff1a;常用快捷键六、重构&#xff1a;常用快捷键七、工具&#xff1a;常用快捷键八、视图&#xff1a;常…...

UDP特性之组播(多播)

UDP特性之组播 1. 组播的特点2. 设置主播属性2.1 发送端2.2 接收端 3. 组播通信流程3.1 发送端3.2 接收端 4. 通信代码 原文链接 在公司测试广播和多播有一点问题。。。 1. 组播的特点 组播也可以称之为多播这也是UDP的特性之一。组播是主机间一对多的通讯模式&#xff0c;是…...

ElasticSearch之cat shards API

命令样例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/shards?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果输出如下&#xff1a; index shard prirep state docs s…...

ElevenLabs乌尔都文TTS接入全链路解析:从API密钥配置到自然停顿优化(含3个未公开参数)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs乌尔都文TTS接入全链路解析&#xff1a;从API密钥配置到自然停顿优化&#xff08;含3个未公开参数&#xff09; ElevenLabs 官方虽未在文档中明确标注乌尔都语&#xff08;ur-PK&#xff09;…...

BLE GATT客户端开发实战:从服务发现到数据解析

1. 项目概述与核心概念解析在物联网和可穿戴设备领域&#xff0c;蓝牙低功耗&#xff08;BLE&#xff09;技术因其低功耗和标准化协议栈&#xff0c;已成为短距离无线通信的首选方案。其核心通信模型基于GATT&#xff08;通用属性配置文件&#xff09;&#xff0c;这是一种结构…...

双喷头3D打印实战指南:从原理到应用,掌握多材料制造

1. 双喷头3D打印&#xff1a;从“炫技”到“实用”的跨越如果你玩3D打印有一段时间了&#xff0c;看着满柜子的单色模型&#xff0c;心里大概会开始痒痒&#xff1a;能不能打印个红蓝相间的超级英雄手办&#xff1f;或者做个硬塑料外壳配软胶按钮的遥控器&#xff1f;这种想法&…...

免费开源工业通信调试工具:ModbusTool终极指南,5分钟快速上手

免费开源工业通信调试工具&#xff1a;ModbusTool终极指南&#xff0c;5分钟快速上手 【免费下载链接】ModbusTool A modbus master and slave test tool with import and export functionality, supports TCP, UDP and RTU. 项目地址: https://gitcode.com/gh_mirrors/mo/Mo…...

终极指南:5分钟掌握STL到STEP格式转换,打破3D设计与制造的数据壁垒

终极指南&#xff1a;5分钟掌握STL到STEP格式转换&#xff0c;打破3D设计与制造的数据壁垒 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 在当今数字化制造与3D设计领域&#xff0c;STL到STEP…...

ElevenLabs泰米尔文TTS接入全链路详解:从API密钥配置、音色微调到低延迟流式响应(附3个避坑代码片段)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs泰米尔文TTS接入全链路详解&#xff1a;从API密钥配置、音色微调到低延迟流式响应&#xff08;附3个避坑代码片段&#xff09; ElevenLabs 自 2024 年起正式支持泰米尔语&#xff08;ta-IN&a…...

texgen.js扩展开发终极指南:如何自定义纹理生成器和滤镜

texgen.js扩展开发终极指南&#xff1a;如何自定义纹理生成器和滤镜 【免费下载链接】texgen.js JavaScript Texture Generator 项目地址: https://gitcode.com/gh_mirrors/te/texgen.js texgen.js 是一个功能强大的JavaScript纹理生成器库&#xff0c;它让开发者能够通…...

【knife4j】接口分组配置;登录拦截器放行;登录拦截器配置token;给全局异常处理类添加注解;解决上传文件不显示文件域;参数扁平化;@Parameter

Parameter Parameter 是用来为 API 接口参数添加元数据&#xff08;描述信息&#xff09;的注解&#xff0c;这些信息最终会生成到 OpenAPI 规范的文档中&#xff0c;供 Knife4j/Swagger UI 等工具展示 简单来说&#xff1a;它让 API 的使用者能清楚地知道每个参数的含义、是…...

2025届最火的十大AI写作平台实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在这个信息呈现爆炸态势的时代当中&#xff0c;内容创作已然变成了个人以及企业所具备的核心…...

别再死记硬背SPI时序了!用STM32CubeMX+W25Q128实战,5分钟搞懂CPOL/CPHA模式选择

从波形到代码&#xff1a;STM32CubeMX可视化解析SPI四种模式的实战指南 当第一次接触SPI通信时&#xff0c;那四种工作模式&#xff08;CPOL/CPHA组合&#xff09;就像天书一样令人困惑。传统教程往往要求死记硬背时序图&#xff0c;但今天我们将通过STM32CubeMX和W25Q128 Flas…...