Linux下libxml库编程(-)

2023-10-27

本文档主要介绍XML的基本知识及如何利用libxml来操作xml文件。
XML是eXtensible Markup Language的缩写,它是一种可扩展性标识语言, 能够让你自己创造标识,标识你所表示的内容。DOM全称是Document Object Model(文档对象模型),定义了一组与平台和语言无关的接口,以便程序和脚本能够动态访问和修改XML文档内容、结构及样式。XML创建了标识,而DOM的作用就是告诉程序如何操作和显示这些标识。
XML将数据组织成为一棵树,DOM通过解析XML文档,为XML文档在逻辑上建立一个树模型,树的节点是一个个的对象。这样通过操作这棵树和这些对象就可以完成对XML文档的操作,为处理文档的所有方面提供了一个完美的概念性框架。
XML 中共有12种节点类型,其中最常见的节点类型有5种:
元素:元素是 XML 的基本组成单元。,描述XML的基本信息。
属性:属性节点包含关于元素节点的信息,通常包含在元素里面,描述元素的属性。
文本:包含许多文本信息或者只是空白。
文档:文档节点是整个文档中所有其它节点的父节点。
注释:注释是对相关的信息进行描述、注释。
需求安装包:libxml2 和libxm2-devel,其中libxml主要包括.so文件,libxml2-devel 包括开发文档和所有的.h文件。可用rpm –ql 命令查看,rpm –qd可查看文档信息。
在libXml中用xmlCha 替代char,XML使用UTF-8编码的一字节字符串。如果你的数据使用其它编码,它必须被转换到UTF-8才能使用libxml的函数。
如同标准c中的char类型一样,xmlChar也有动态内存分配、字符串操作等相关函数。例如xmlMalloc是动态分配内存的函数;xmlFree是配套的释放内存函数;xmlStrcmp是字符串比较函数等等。基本上xmlChar字符串相关函数都在xmlstring.h中定义;而动态内存分配函数在xmlmemory.h中定义。
另外要注意,因为总是要在xmlChar*和char*之间进行类型转换,所以定义了一个宏BAD_CAST,其定义如下:xmlstring.h

 

#define BAD_CAST (xmlChar *)

 

原则上来说,unsigned char和char之间进行强制类型转换是没有问题的。
XmlDoc: 代表DOM结构中的文档类型。包含由解析文档建立的树结构,xmlDocPtr是指向这个结构的指针。
xmlNode:代表DOM结构中的除文档类型类型外的其它节点类型。包含单一结点的结构,xmlNodePtr是指向这个结构的指针,它被用于遍历文档树。节点应该是xml中最重要的元素了,xmlNode代表了xml文档中的一个节点,实现为一个struct,内容很丰富:tree.h

 

typedef struct _xmlNode xmlNode;
typedef xmlNode *xmlNodePtr;
struct _xmlNode {
    void           *_private;
     xmlElementType   type;  
    const xmlChar   *name;     
    struct _xmlNode *children;
    struct _xmlNode *last;  
    struct _xmlNode *parent;
    struct _xmlNode *next;  
    struct _xmlNode *prev;  
    struct _xmlDoc *doc;
   
    xmlNs           *ns;       
    xmlChar         *content;  
    struct _xmlAttr *properties;
    xmlNs           *nsDef;    
    void            *psvi;
    unsigned short   line;  
    unsigned short   extra;
};

 

以看到,节点之间是以链表和树两种方式同时组织起来的,next和prev指针可以组成链表,而parent和children可以组织为树。所有节点都是文档XmlDoc节点的直接或间接子节点。同时还有以下重要元素:
l节点中的文字内容:content
l   节点所属文档:doc
l   节点名字:name
l   节点的namespacens
l   节点属性列表:properties
Xml文档的操作其根本原理就是在节点之间移动、查询节点的各项信息,并进行增加、删除、修改的操作。xmlDocSetRootElement函数可以将一个节点设置为某个文档的根节点,这是将文档与节点连接起来的重要手段,当有了根结点以后,所有子节点就可以依次连接上根节点,从而组织成为一个xml树。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux下libxml库编程(-) 的相关文章

  • gdb调试心得

    最近bug check过程中 学到不少关于gdb调用的方法 包括查看stack frame 及函数调用时的堆栈约定 总结如下 1 core文件中每个stack frame保存自己的ebp esp信息 2 ebp 8是第一个参数 ebp 12
  • linux c程序文件上锁,Linux C -> flock -> 上锁或解锁

    Linux C gt flock gt 上锁或解锁 解释 如果给当前文件加上独占锁 则其它程序进程在此文件未解锁前无法使用该文件 int out char buffer 100 abcdedffsdfsa out open aaaa O R
  • 【程序】程序员与中秋节的约会

    中秋节 这个盛满诗意与传说的节日 向来是人们心中的佳节 然而 当程序员这个神秘群体与之碰撞 节日的氛围便注入了别样的色彩 程序员的世界以代码为语言 而中秋的团圆与诗意 也能在代码中找到安放之处 一 中秋的代码之美 作为程序员 我们或许更习惯
  • DataEase查询报“Row XXX was cut by GROUP_CONCAT()”异常的解决

    MySql数据库查询时 或者insert into tables时报错 使用group concat报错 Row 55 was cut by GROUP CONCAT 网上查了一下是因为GROUP CONCAT有个最大长度的限制 超过最大长
  • boost::bind 详解

    转自 https www cnblogs com benxintuzi p 4862129 html boost bind是标准库函数std bind1st和std bind2nd的一种泛化形式 其可以支持函数对象 函数 函数指针 成员函数
  • C++ Primer阅读笔记--异常处理机制

    目录 1 异常处理机制 2 throw表达式 3 try语句块 4 标准异常类 5 代码实例 1 异常处理机制 异常处理机制为程序中的异常检测和异常处理这两部分的协作提供支持 在 C 语言中 异常处理包括 throw表达式 try语句块和异
  • GD32 低功耗模式-深度睡眠模式(包含1,2)电流达不到规格书的要求

    深度睡眠模式 深度睡眠模式1 深度睡眠模式2在测试时电流比数据手册中大得多 1 测试GD32E503RE芯片时 发现各个低功耗模式的电流分别为 run mode 3 0 3 3mA左右 sleep mode 2 4 2 5mA deepsl
  • 打包Qt 在ubuntu下运行的应用程序

    标题使用Qt Installer Framework工具进行打包Qt 在ubuntu下运行的应用程序 使用Qt Installer Framework工具进行打包 使用官网example中的tutorial 将Qt生成的应用程序拷贝到 xx
  • 当我们在地址栏输入网址并回车,这个过程都发生了啥?

    当我们在地址栏输入网址并按下回车键时 发生了以下一系列步骤 DNS解析 浏览器会提取输入的网址 URL 中的域名部分 然后通过 DNS Domain Name System 解析将域名转换为对应的 IP 地址 DNS解析是为了找到对应网站服
  • 用法char ch=getchar()正确性详解

    C陷阱与缺陷 chap5 1 include
  • Tiny Httpd在ubuntu上的运行,以及对tinyhttpd的理解

    目录 对tinyhttpd的理解 在ubuntu上运行程序 下载完成后需要对代码以及makefile进行修改 运行 首先我们了解一下相关内容 分析源码 源码顺序main gt startup gt accept request gt exc
  • android layout_torightof 代码,Android常用的布局属性

    1 background 背景 值可以是颜色值 也可以是drawable的图片资源 还可以是drawable的xml背景文件 2 layout width 和 layout height 控件的宽度 高度 可以是match parent和w
  • 技术方案书模板-1

    http www mypm net blog user1 epmt archives 2006 1544 html 1 序言 简述项目实施的必要性及意义 2 需求分析 2 1 技术现状 描述用户现有技术应用环境 人员技术状况 2 2 用户需

随机推荐

  • 豆瓣api不能访问了的解决办法

    在参数中添加apikey apikey 0b2bdeda43b5688921839c8ecb20399b 例如https api douban com v2 movie top250 apikey 0b2bdeda43b5688921839
  • 分布式RPC系统框架Dubbo-12服务调用超时

    服务降级的发生 其实是由于消费者调用服务超时引起的 即从发出调用请求到获取到提供者的响应结果这个时间超出了设定的时限 默认服务调用超时时限为1秒 可以在消费者端与提供者端设置超时时限 1 创建提供者工程 1 创建工程 创建provider
  • javascript 函数(function)

  • Linux CGI编程基础

    1 为什么使用CGI 如前面所见 任何的HTML均是静态网页 它无法实现一些复杂的功能 而CGI可以为我们实现 如 a 列出服务器上某个目录中的文件 对目录中的文件进行操作 b 通过CGI实现串口通讯 c 实现数据库接口 d 实现从摄像头读
  • 【数学建模竞赛】Matlab逻辑规则,结构基础及函数

    逻辑基础 逻辑变量 在Matlab中 逻辑变量是一种特殊类型的变量 用于表示逻辑值 逻辑变量只有两个可能的值 true 真 和false 假 在Matlab中 我们可以使用0和1来表示逻辑变量的值 为了定义逻辑变量 可以使用syms函数来定
  • IntelliJ IDEA WEB项目的部署配置

    摘要 非maven项目 和 maven项目部署配置的探究 Intellij IDEA Web 部署 目录 1 前言 2 项目配置 Project Structure 2 1 Project 2 2 Modules 2 3 Libraries
  • windows平台下idea打开闪退和显示已停止问题处理

    1选中idea右击兼容性疑难解答 2 选择第三个 3 选择第一个 4 点击启动程序 5 最后下一步后 记住点击保存设置 以后就可以没有问题打开了
  • 中国互联网技术联盟正式成立 京东、美团、 58到家现场分享推荐系统核心技术

    12月19日 中国技术开放日暨中国互联网技术联盟 ITA 启动仪式在北京国家会议中心举行 京东技术学院院长阿朱 原明源软件CTO 美团技术学院院长刘江 原CSDN总编 及来自联盟企业的多位CTO共同见证了这一刻 中国互联网技术联盟 ITA
  • redis触发了rdb机制,去没有自动生成dump.rdb文件

    设置触发条件 进行触发rdb机制 一开始没有在 usr local bin目录下生成dump rdb文件 后来在进入redis con文件的文件夹中 发现在这里生成了dump rdb 于是查看了redis的启动目录 后来改在 usr loc
  • kaggle房价预测特征意思_Kaggle项目之房价预测

    一 明确目的 本次练习需要围绕以下目的进行 基于竞赛方所提供的爱荷华州埃姆斯的住宅数据信息 预测每间房屋的销售价格 理解问题 观察每个变量特征的意义以及对于问题的重要程度 研究主要特征 房价 研究其他变量 研究其它变量对 房价 的影响以及它
  • redis锁

    一 redis锁的实现 加锁命令 SETNX key value 当键不存在时 对键进行设置操作并返回成功1 否则返回失败0 Key是锁的唯一标识 一般按业务来决定命名 Value 往往用来比较加锁的是哪一个线程或者哪一个消息 一般使用UU
  • 开源的MiniGPT-4可以让你提前体验一下GPT-4的魅力

    多模态GPT 4大模型的发布 让很多人看到了AI人工智能的魅力 特别是ChatGPT的流行 让很多人开始关注人工智能 虽然ChatGPT可以通过一些魔法进行使用 但是GPT 4多模态大模型 openai却没有完全免费开放给个人 要想使用GP
  • Android系统启动流程 源码解析

    Android系统启动流程 本文链接 https blog csdn net feather wch article details 132518105 有道云脑图 https note youdao com s GZ9d8vzO 1 整体
  • Java中的定时任务应用

    一 使用Java的Timer import java text ParseException import java text SimpleDateFormat import java util Date import java util
  • 安装Altium Designer 2022版本步骤含阿里网盘安装包(不限速)

    Altium designer 学习笔记第一篇 安装Altium Designer2022步骤及阿里网盘安装包 不限速 一 安装包链接 https www aliyundrive com s e85bUWKU45N 提取码 jd63 注 若
  • 数据结构 - 二叉树

    文章目录 目录 文章目录 前言 一 树型结构 1 1 树的概念 了解 1 2 数的常用术语 掌握 1 3 树的应用 了解 1 4 树相较于数组和链表的优势 了解 二 二叉树 重点 2 1 二叉树的概念 2 2 两种特殊的二叉树 2 3 二叉
  • 基于LLMs的多模态大模型(PALM-E,ArtGPT-4,VPGTrans )

    这个系列已经更文一些了 如果有新的文章会继续补充 基于LLMs的多模态大模型 Visual ChatGPT PICa MM REACT MAGIC 基于LLMs的多模态大模型 Flamingo BLIP 2 KOSMOS 1 基于LLMs的
  • Spring Boot集成OpenLdap 进行权限验证

    一 搭建openldap 搭建openldap可以有多种方式进行 1 可以去官网下载源码包 自行编译 安装 2 可以使用docker进行安装 这边主要介绍使用docker安装openldap 参考文章 https blog csdn net
  • FastSpeech2论文中文翻译

    FastSpeech2 论文的翻译 翻译的挺差的 大概是那意思 只翻译了摘要 模型部分和实验部分 摘要 高级的TTS模型像fastspeech 能够显著更快地合成语音相较于之前的自回归模型 而且质量相当 FastSpeech模型的训练依赖于
  • Linux下libxml库编程(-)

    http leansmall blog 163 com blog static 51617691200811171530183 1 编写说明 本文档主要介绍XML的基本知识及如何利用libxml来操作xml文件 2 XML基础 XML是eX