• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

libxml2实现xml文档的节点的修改

mysql 搞代码 4年前 (2022-01-09) 29次浏览 已收录 0个评论

其实在网上很容易能找到使用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<i>本文来源gaodai$ma#com搞$代*码网2</i>(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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:libxml2实现xml文档的节点的修改
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址