libxml2读写XML文件测试

libxml2是一个功能强大的XML解析库,可以用于读取和写入XML文件。以下是一些基本的例子来展示如何使用libxml2进行读写操作。

写文件

在这个例子中,我们首先创建一个新的XML文档,并设置一个根节点。然后,我们创建两个新的节点,并将它们添加到根节点。最后,我们将这个XML文档保存到一个文件output.xml中。

#include <stdio.h>  
#include <libxml/parser.h>  
#include <libxml/tree.h>  int xml_write(void) {  xmlDocPtr doc = NULL;   xmlNodePtr root_node = NULL, node = NULL, node1 = NULL;  LIBXML_TEST_VERSION  doc = xmlNewDoc(BAD_CAST "1.0");  root_node = xmlNewNode(NULL, BAD_CAST "root");  xmlDocSetRootElement(doc, root_node);  node = xmlNewNode(NULL, BAD_CAST "node1");  xmlNodeSetContent(node, BAD_CAST "content of node1");  xmlAddChild(root_node, node);  node1 = xmlNewNode(NULL, BAD_CAST "node2");  xmlNodeSetContent(node1, BAD_CAST "content of node2");  xmlAddChild(root_node, node1);  int nRel = xmlSaveFormatFileEnc("output.xml", doc, "UTF-8", 1);  if (nRel != -1)  printf("An XML file is created successfully.\n");  xmlFreeDoc(doc);  xmlCleanupParser();  return 0;  
}

执行后创建的文件:

<?xml version="1.0" encoding="UTF-8"?>
<root><node1>content of node1</node1><node2>content of node2</node2>
</root>

读文件

在这个例子中,我们首先读取一个XML文件,并获取其根元素。然后,我们遍历XML文档的所有节点,并打印出它们的名称。最后,我们释放XML文档并清理解析器。

注意:在运行这些代码之前,你需要确保已经安装了libxml2库,并且在编译代码时需要链接这个库。例如,如果你使用gcc编译器,你可以这样编译代码:gcc your_code.c -o your_program -lxml2

 

#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);  printf("node type: Element, content: %s\n", cur_node->content); const xmlChar* content = xmlNodeGetContent(cur_node);printf("content: %s\n", content);}  print_element_names(cur_node->children);  }  
}  int xml_read(void) {  xmlDoc *doc = NULL;  xmlNode *root_element = NULL;  char *file_name = "output.xml";doc = xmlReadFile(file_name, NULL, 0);  if (doc == NULL) {  printf("error: could not parse file %s\n", file_name);  exit(-1);  }  root_element = xmlDocGetRootElement(doc);  print_element_names(root_element);  xmlFreeDoc(doc);  xmlCleanupParser();  return 0;  
}

在测试主函数中调用xml_read完成测试,测试结果如下:由测试结果可知,直接访问cur_node->content指针返回的是空的值,使用xmlNodeGetContent函数会返回所有子节点的值,所以在具体使用时,要添加一些节点的判断,以保证获取到需要的值。

小结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大型网站系统架构演化实例_6.使用分布式文件系统和分布式数据库系统

1.使用分布式文件系统和分布式数据库系统 任何强大的单一服务器都满足不了大型网站持续增长的业务需求。数据库经过读写分离后&#xff0c;从一台服务器拆分成两台服务器&#xff0c;但是随着网站业务的发展依然不能满足需求&#xff0c;这时需要使用分布式数据库。文件系统也一…

3dmax安装错误代码2146885616,也出现以下可选组件未成功安装:-Substance

当3dmax高版本出现安装错误代码2146885616&#xff0c;或者可选组件未成功安装:-Substance时&#xff0c;如图 解决方法如下 打开autoremove&#xff0c;点击扩展功能&#xff0c;搜索2146885616点击搜索 点击出现的按钮&#xff0c;提示如图&#xff0c;请重启电脑再点击一…

html网页在展示时,监听网络是否断网,如果断网页面暂停点击响应

序言&#xff1a; 集合百家之所长&#xff0c;方著此篇文章&#xff0c;废话少说&#xff0c;直接上代码&#xff0c;找好你的测试网页&#xff0c;进行配置&#xff0c;然后复制粘贴代码&#xff0c;就可以了。 1.css文件内容 #newbody{display: none;width: 100%;height: 9…

24V转2.8V2A降压芯片WT6030

24V转2.8V2A降压芯片WT6030 WT6030是一种高效同步整流降压开关模式转换器&#xff0c;集成内部功率MOSFET。该器件在宽输入电源范围内提供3A峰值输出电流&#xff0c;展现出卓越的负载和线路调节性能。其设计仅需要最小数量的外部现成组件&#xff0c;并且采用了节省空间的ESO…

MIMO(多天线)通信的四种译码算法

目录 一. 介绍 二. 极大似然译码 三. 破零译码算法 四. 最小均方误差算法 五. 球形译码 一. 介绍 发射天线数记为Mt&#xff0c;接收天线数记为Mr。由此发射信号x为向量&#xff1a; 接受信号y为向量&#xff1a; 信道H为矩阵&#xff1a; 利用n代表噪声向量&#xff0c;…

揭秘:从低代码到APP工厂,从休闲T恤到蓝色工装

2024年3月29日&#xff0c;感恩伯乐&#xff0c;感恩同行——2024年得帆十周年庆典暨用户大会在上海佘山世茂洲际酒店圆满举办。作为业内规模最大的低代码主题峰会&#xff0c;本次峰会汇聚了来自全国62个城市&#xff0c;500参会嘉宾&#xff0c;59位业界专家带来了2场主题发布…

亿发:信息化管理软件是什么?企业智慧信息化解决方案的重要性

在当今数字化时代&#xff0c;企业信息化管理已成为提升运营效率和促进发展的关键。信息化管理软件是企业数字化转型的重要工具&#xff0c;但单一软件往往难以满足企业多方面的高质量发展需求。因此&#xff0c;企业整体信息化解决方案的重要性愈发凸显。 什么是信息化管理软件…

新质生产力应用场景深度分析,再塑行业格局

新质生产力应用场景深度分析 技术突破、要素创新配置和产业深度转型升级&#xff0c;催生“新质生产力”定义&#xff1a;新质生产力是由技术革命性突破、生产要素创新性配置、产业深度转型升级而催生的当代先进生产力&#xff0c;它以劳动者、劳动资料、劳动对象及 其优化组合…

【御控物联网平台】物联网平台常见通讯协议

随着物联网&#xff08;InternetofThings&#xff0c;IoT&#xff09;的快速发展&#xff0c;越来越多的设备和传感器连接到网络&#xff0c;使得数据的传递和交互变得更加智能化和高效化。在实现这种智能化和高效化的数据交互&#xff0c;过程中&#xff0c;各种不同的通信协议…

PROSAIL模型前向模拟与植被参数遥感提取代码实现

原文链接&#xff1a;PROSAIL模型前向模拟与植被参数遥感提取代码实现https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247602140&idx7&sn7c4ca9239865d536ba81ba4c26a34031&chksmfa820e3bcdf5872d540c0dfe8c533c8696c8b4658427aab254f246a739f96b36bc37…

使用代理绕过网站的反爬机制

最近在尝试收集一些网络指标的数据&#xff0c; 所以&#xff0c; 我又开始做爬虫了。 :) 我们在做爬虫的过程中经常会遇到这样的情况&#xff0c;最初爬虫正常运行&#xff0c;正常抓取数据&#xff0c;一切看起来都是那么的美好&#xff0c;然而一杯茶的功夫可能就会出现错误…

java 学习一

jdk下载地址 配置环境变量

【数学归纳法 组合数学】容斥原理

问题提出 有n个条件&#xff0c;要求不重复统计满足一到n个条件的所有可能数。 容斥原理 要计算几个集合并集的大小&#xff0c;我们要先将所有单个集合的大小计算出来&#xff0c;然后减去所有两个集合相交的部分&#xff0c;再加回所有三个集合相交的部分&#xff0c;再减…

电子签名在人力资源中的应用:让HR工作更高效

人力资源&#xff08;HR&#xff09;行业是电子签领域的重要应用之一&#xff0c;它可以在以下场景中使用电子签&#xff1a; 1. 在招聘流程中&#xff0c;HR部门可以利用电子签名工具来完成与招聘候选人之间的任何文件签署操作。例如&#xff0c;维护人才库数据库、简历、面试…

HTML不常用的文本标签

1.标签如下&#xff1a; 代码及相关内容 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>不常用的文…

中医药性笔记

目录 当归黄芪党参白术甘草茯苓半夏陈皮升麻柴胡 当归 补血。 当归&#xff0c;腾讯医典 黄芪 土金之药。 补中气的同时补肺气。益卫固表、利水消肿、 腾讯医典黄芪 党参 土金之药。健脾益肺&#xff0c;生津养血。 党参补气之力弱于人参、用于脾肺气虚的轻症。 党…

[2024更新]如何从Android恢复已删除的相机照片?

相信大家都经历过Android手机误删相机图片的经历。您是否正在寻找一种可行的方法来挽救这些丢失的照片&#xff1f;如果这是你迫切想解决的问题&#xff0c;那么这篇文章绝对可以帮助你。然而&#xff0c;与其考虑如何从Android恢复已删除的相机照片&#xff0c;我们更愿意建议…

ETL简介以及使用ETL(Kettle)进行数据接入的具体例子

目录 ETL介绍 ETL简介 ETL包含的三部分 ETL基本概念 ETL资源库 ETL变量 业务表梳理以及接入规划 数据接入流程 业务表梳理 ETL任务规范 接入规划 数据接入中的方便工具 具体例子 导出生产表信息 1、ORACLE 2、MYSQL ETL数据增量抽取任务开发 1、ORACLE通用流程…

Linux 网络编程

引入: 进程间的通信 - 特点: 依赖 Linux内核. --> 缺陷: 无法多机通信 多机通信 -- 比如 Android IOS Linux之间的通信组合 网络编程: 1.地址: a.IP地址 b.端口号 2.数据: 需要协议传输协议(数据格式)&#xff08;TCP UDP HTTP&#xff09; &#xff0c;其他协议&am…

2024最新Java面试宝典(史上最全,BAT大厂面试必备,用心看完这一篇就够了!)

&#x1f680; 作者 &#xff1a;“二当家-小D” &#x1f680; &#x1f680; 博主简介&#xff1a;⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人&#xff0c;8年开发架构经验&#xff0c;精通java,擅长分布式高并发架构,自动化压力测试&#xff0c…