libxml2实现xml文档的节点的修改
来源:互联网 发布:game of life 算法 编辑:程序博客网 时间:2024/06/07 01:37
其实在网上很容易能找到使用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 <stdio.h>#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节点的属性
- [XML文档解析]libxml2对XML文件的创建、解析、查找、修改
- 用libxml2操作xml文档的例子
- [libxml2]_[XML处理]_[使用libxml2的xpath特性修改xml文件内容]
- XML文档的节点类型
- libxml2对XML文件的创建、解析、查找、修改
- libxml2对XML文件的创建、解析、查找、修改
- libxml2对XML文件的创建、解析、查找、修改
- libxml2对XML文件的创建、解析、查找、修改
- libxml2对XML文件的创建、解析、查找、修改
- libxml2对XML文件的创建、解析、查找、修改
- libxml2对XML文件的创建、解析、查找、修改
- XML节点值的修改
- libxml2 解析文档的例子
- libxml2 库的实现
- C的xml编程-libxml2
- C的xml编程-libxml2
- dataguard 主库报 PING[ARC1]: Error 1041
- Oracle使用过程中的点点滴滴
- java 面向切面编程的例子
- 你得学会并且学得会的Socket编程基础知识(续)——Silverlight客户端
- Java Annotation手册
- libxml2实现xml文档的节点的修改
- java 类的学习——多态
- 学习AJAX--用JQuery实现文本框自动完成
- 在windows上使用symfony创建简易的CMS系统(二)
- windows系统上安装与使用Android NDK r5
- concepts阅读总结10——分区
- 字符串查找之KMP
- 巧尽其用的虫足
- 游戏地图分块加载资源篇——切图工具