热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

libxml2实现xml文档的节点的修改-mysql教程

其实在网上很容易能找到使用libxml2来对xml文档进行创建、解析、修改等。我着这里主要是就自己学习的libxml2修改xml文档的节点进行一个简单的总结,方便自己以后回顾。下面给出我写的一个例子:*********************************************************

其实在网上很容易能找到使用libxml2来对xml文档进行创建、解析、修改等。我着这里主要是就自己学习的libxml2修改xml文档的节点进行一个简单的总结,方便自己以后回顾。 下面给出我写的一个例子: /*********************************************************

其实在网上很容易能找到使用libxml2来对xml文档进行创建、解析、修改等。我着这里主要是就自己学习的libxml2修改xml文档的节点进行一个简单的总结,方便自己以后回顾。

下面给出我写的一个例子:

/********************************************************************** 

                Copyright, 2011, **** Tech. Co., Ltd. 

                            All Rights Reserved 

----------------------------------------------------------------------- 

Project Code   : wlan 

File name      : modify_node.cpp 

Author         : Sky_qing 

Description    : 使用libxml2修改xml文档的节点

Function List: 

----------------------------------------------------------------------- 

History:  

Date            Author                 Modification 

2011-12-27     Sky_qing                created file

**********************************************************************/
#include 
#include "libxml/parser.h"
#include "libxml/tree.h"

int main(int argc, char* argv[])
{
	xmlDocPtr doc;				//定义解析文档指针
	xmlNodePtr curNode;			//定义节点指针(在各个节点之间移动)
	char* szDocName = argv[1];	//保存xml文档名,该文档名在运行程序到时候输入。
	//例如:编译格式为g++ modify_node.cpp -o modify_node -I /usr/local/include/libxml2/  -L /usr/local/lib -lxml2,生成可执行文件modify_node,运行时:./modify_node log4crc(此处log4crc为要修改的xml文档)

	printf("........start........\n");
    doc = xmlReadFile(szDocName, "utf-8", XML_PARSE_RECOVER); 	//解析文档
	if (NULL == doc)
	{
		fprintf(stderr, "Document not parsed successfully.\n");
		
		return -1;
	}

	curNode = xmlDocGetRootElement(doc);		//确定文档根元素
	if (NULL == curNode)
	{
		fprintf(stderr, "Empty Document.\n");
		xmlFreeDoc(doc);		//释放文件

		return -1;
	}

	if (xmlStrcmp(curNode->name, (const xmlChar*)"log4c"))	//确认根元素是否为“log4c”
	{
		fprintf(stderr, "Document of wrong type. root node != log4c");
		xmlFreeDoc(doc);

		return -1;
	}

	curNode = curNode->xmlChildrenNode;
	xmlNodePtr propNode = curNode;
	while (NULL != curNode)		//遍历所有节点
	{
		//获取名称为category的节点
		if (!xmlStrcmp(curNode->name, (const xmlChar*)"category"))
		{
			//查找带有属性name的节点
      		if (xmlHasProp(curNode, BAD_CAST "name"))
       		{
                propNode = curNode;
     		}

			//查找属性name为WLAN_Console的节点
    		xmlAttrPtr attrPtr = propNode->properties;
			while (NULL != attrPtr)		//遍历所有名称为category的节点
    		{
		   		if (!xmlStrcmp(attrPtr->name, (const xmlChar*)"name"))	//找到有name属性到节点
		   		{
					//查找属性为name的值的节点
					xmlChar* szPropity = xmlGetProp(propNode, (const xmlChar*)"name");
					if (!xmlStrcmp((const xmlChar*)szPropity, (const xmlChar*)"WLAN_Console"))
					{
						xmlAttrPtr setAttrPtr = propNode->properties;
						while (NULL != setAttrPtr)
						{
							//设置属性priority的值
							xmlSetProp(propNode, (const xmlChar*)"priority", (const xmlChar*)"debug");
			
							setAttrPtr = setAttrPtr->next;
						}
					}
		  		}
		   		attrPtr = attrPtr->next;
	   		}	
		}
		curNode = curNode->next;
	}
	
	//保存文档到原文档中
	xmlSaveFile("log4crc", doc);

	printf("...........OK............\n");

	return 0;
}


编译和运行格式在代码中有。

参考文章:

http://blog.sina.com.cn/s/blog_669e9f6a0100sbql.html

http://wenku.baidu.com/view/02d0fdea172ded630b1cb61c.html

推荐阅读
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 程序员妻子吐槽:丈夫北漂8年终薪3万,存款情况令人意外
    一位程序员的妻子在网上分享了她丈夫在北京工作八年的经历,月薪仅3万元,存款情况却出乎意料。本文探讨了高学历人才在大城市的职场现状及生活压力。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 在 Windows 10 中,F1 至 F12 键默认设置为快捷功能键。本文将介绍几种有效方法来禁用这些快捷键,并恢复其标准功能键的作用。请注意,部分笔记本电脑的快捷键可能无法完全关闭。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
author-avatar
辛愿1346_589
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有