Author:张继飞

插入节点部分的实现是从现有节点的后面添加。

为了解决插入后不对齐的问题,需要修改这几个地方

doc=xmlParseFile("xml.xml"); 改为    doc=xmlReadFile("xml.xml","UTF-8",XML_PARSE_NOBLANKS);

xmlSaveFormatFile("xml.xml", doc, 0); 改为 xmlSaveFormatFile("xml.xml", doc, 1);

#include <stdio.h>
#include <stdlib.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
int main(int argc, char **argv)
{///insert message into xml.xml 该部分为在相关xml文件插入节点
    xmlDocPtr doc = NULL;       /* document pointer */
    xmlNodePtr root_node = NULL, node = NULL, node1 = NULL;/* node pointers */
    doc=xmlParseFile("xml.xml");          //首先解析xml文件,放入内存
    root_node = xmlDocGetRootElement(doc);     //获取根节点
//creates a new node, which is "attached" as child node of root_node node. 
    node = xmlNewChild(root_node, NULL, BAD_CAST "node1",BAD_CAST "content of node1");   //根据根节点(root_node)来插入根节点的的子节点为node1,
           xmlNewChild(node, NULL, BAD_CAST "node2",BAD_CAST "node2 is node1's sub");    //根据子节点node1(node)来插入子节点的的子节点为node2,

node=xmlNewChild(root_node, NULL, BAD_CAST "node3",BAD_CAST"node has attributes"); //插入根节点的子节点node3
    xmlNewProp(node, BAD_CAST "attribute", BAD_CAST "yes");   //添加子节点的属性。
//Here goes another way to create nodes.
    node = xmlNewNode(NULL, BAD_CAST "node4");
    node1 = xmlNewText(BAD_CAST"other way to create content");
    xmlAddChild(node, node1);
    xmlAddChild(root_node, node); //Dumping document to stdio or file
    xmlSaveFormatFile("xml.xml", doc, 0);   //将此内存保存到文件

xmlFreeDoc(doc); /*free the document */
    xmlCleanupParser();
    xmlMemoryDump();//debug memory for regression tests
    return(0);
}
/*
int main(int argc, char **argv)
{///creat xml doc   该部分为创建xml文件
    xmlDocPtr doc = NULL;       // document pointer
    xmlNodePtr root_node = NULL, node = NULL, node1 = NULL;// node pointers
// Creates a new document, a node and set it as a root node
    doc = xmlNewDoc(BAD_CAST "1.0");
    root_node = xmlNewNode(NULL, BAD_CAST "root");
    xmlDocSetRootElement(doc, root_node);
//creates a new node, which is "attached" as child node of root_node node. 
    xmlNewChild(root_node, NULL, BAD_CAST "node1",BAD_CAST "content of node1");
// xmlNewProp() creates attributes, which is "attached" to an node.
    node=xmlNewChild(root_node, NULL, BAD_CAST "node3",BAD_CAST"node has attributes");
    xmlNewProp(node, BAD_CAST "attribute", BAD_CAST "yes");
//Here goes another way to create nodes.
    node = xmlNewNode(NULL, BAD_CAST "node4");
    node1 = xmlNewText(BAD_CAST"other way to create content");
    xmlAddChild(node, node1);
    xmlAddChild(root_node, node); //Dumping document to stdio or file
    xmlSaveFormatFileEnc(argc > 1 ? argv[1] : "-", doc, "UTF-8", 1);  //free the document
    xmlFreeDoc(doc);
    xmlCleanupParser();
    xmlMemoryDump();//debug memory for regression tests
    return(0);
}*/
/*
gcc -o main xml.c -lxml2 -I /usr/include/libxml2/

下面为创建后产生的结果:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <node1>content of node1</node1>
  <node3 attribute="yes">node has attributes</node3>
  <node4>other way to create content</node4>
</root>

下面为在上面基础上执行插入后产生的结果,虽然后面的排列不整齐,但不影响xml的解析。

<?xml version="1.0" encoding="UTF-8"?>
<root>
 <node1>content of node1</node1>
 <node3 attribute="yes">node has attributes</node3>
 <node4>other way to create content</node4>
<node1>content of node1</node1><node3 attribute="yes">node has attributes</node3><node4>other way to create content</node4><node1>content of node1<node2>node2 is node1's sub</node2></node1><node3 attribute="yes">node has attributes</node3><node4>other way to create content</node4></root>

*/

xml文件的创建和插入节点【原创】相关推荐

  1. 【.NET】XML文件的创建,修改,删除

    类名:XML /// 1.创建XML文档 /// 2.在根节点下增加子元素 /// 3.在元素下增加子元素 /// 4.获取类型为制定值的一组节点 /// 5.抓取网页上的xml文档赋值给XmlDoc ...

  2. libxml2对XML文件的创建、解析、查找、修改

    一.Libxml2介绍: Libxml2 是一个xml的c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件.它除了支持c语言版以外,还支持c++.PHP ...

  3. 【DOM编程艺术】动态创建标记(签)---创建和插入节点

    window.οnlοad=function(){var para=document.createElement('p');var info= 'nodeName:';info += para.nod ...

  4. C# xml文件的创建,修改和添加节点 。

    最近在做一个项目,设计到xml文件的传输,所以就研究了一下. ,.NET Framework完全支持XML DOM模式,但它不支持SAX模式..NET Framework支持两种不同的分析模式:XML ...

  5. 【unity3d--初始学习五--c#脚本对xml文件的创建和解析】

    本人用c#编写脚本. 创建xml文件时,主要用到System.Xml包中的XmlDocument,XmlNode,XmlElement.下面是创建xml文档的一般步骤: XmlDocument doc ...

  6. Linux下的xml文件的创建

    创建一个xml文档流程如下: l    用xmlNewDoc函数创建一个文档指针doc: l    用xmlNewNode函数创建一个节点指针root_node: l    用xmlDocSetRoo ...

  7. java解析xml文件:创建、读取、遍历、增删查改、保存

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用JDOM接口解析xml文件,包含创建.增删查改.保存,读取等操作. 需要引入jdom.jar,下载 xercesImpl.jar,下载 ...

  8. Android学习笔记之AndroidManifest.xml文件解析(学习别人的..非原创)

    AndroidManifest.xml是每个android程序中必须的文件.它位于application的根目录,描述了package中的全局数据,包括了package中暴露的组件(activitie ...

  9. Qt操作XML文件(创建,读,写,修改,添加,删除)

    XML文件在项目开发的过程中经常用的,比如配置文件基本上都是XML格式的,本文介绍在Qt环境下操作XML文件,具体用法看代码 原txt文件内容,在 http://www1.jctrans.com/to ...

最新文章

  1. java后台post请求调用接口
  2. 安装Anaconda创建虚拟环境以及在pycharm中使用虚拟环境
  3. python 购物车代码
  4. Block 再学习 !
  5. 大数据助力智慧城市建设
  6. sdch: chrome支持的新HTTP传输压缩算法
  7. 基于mysql和php的分布式事务处理1,基于MySQL和PHP的分布式事务处理
  8. SQL Server 高可用性(一)AlwaysOn 技术
  9. java七武器系列_Java七武器系列多情环 --多功能Profiling工具 JVisual VM
  10. 【大数据部落】R语言如何使用rjags R2jags来建立贝叶斯模型
  11. 网络节点是计算机与网络的什么,网络节点是什么意思?
  12. S7-1500 CPU、显示器、ET 200SP CPU 和 ET 200pro CPU 的固件更新方法
  13. java 阿里云消息推送到手机
  14. KUKA库卡机器人零点失效维修案例
  15. MSOCache文件夹能否删除
  16. 美国enom域名的优势
  17. 程序员怎样更优雅的接私活赚外快
  18. python制作ico图标_python使用PythonMagic k将jpg图片转换成ico图片的方法
  19. 一个月薪5k+的广州安全服务实习生的真实生活
  20. Java毕设项目师生健康信息管理系统(java+VUE+Mybatis+Maven+Mysql)

热门文章

  1. 北大博士,毕业做北京城管,他的同事清一色名校硕士,博士,这个世界怎么了?...
  2. 深度挖掘论文:《Semantic Soft Segmentation》(语义软分割)
  3. 32-bit ARM的 word halfword byte
  4. c oracle 分页工具类,Util工具类 跨Oracle、MySQL通用分页查询
  5. python实现编译器链接器_Python入门之Python编译器
  6. 华为再发行30亿元超短期融资券
  7. iPhone 13凌晨发布,电池容量较iPhone 12最高有望提升20%(文末有福利)
  8. ofo败局中唯一赚到钱的只有他?当事人回应......
  9. “入圈”高端大获成功!小米10至尊版上市首月霸榜京东、天猫5000元以上档销量第一...
  10. 来做网课老师不?年薪两百万,上不封顶...