最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-09 15:58:43
文档

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

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

文档

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

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

最新推荐

猜你喜欢

热门推荐

专题
Top