其实在网上很容易能找到使用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

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

libxml2如何配合php使用,libxml2实现xml文档的节点的修改相关推荐

  1. php循环获取xml节点,PHP_PHP遍历XML文档所有节点的方法,本文实例讲述了PHP遍历XML文档 - phpStudy...

    PHP遍历XML文档所有节点的方法 本文实例讲述了PHP遍历XML文档所有节点的方法.分享给大家供大家参考.具体实现方法如下: 1. contact.xml代码: J J J Manager Nati ...

  2. Xml文档添加节点和属性

    在实际的应用开发中需要我们对xml进行添加节点和属性,动态的去完成,在这之前,先看看XmlNode和XmlElement之间的关系 1.XmlElement继承XmlLinkedNode又继承XmlN ...

  3. 使用Libxml2操作XML文档

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

  4. XML文档操作工具类

    1 /// <summary> 2 /// XML文档操作工具类 3 /// </summary> 4 public class XmlUtil 5 { 6 #region X ...

  5. python批量生成,用python批量生成简单的xml文档

    最近生成训练数据时,给一批无效的背景图片生成对应的xml文档,我用python写了一个简单的批量生成xml文档的demo,遇见了意外的小问题,记录一下. 报错问题为:ImportError: No m ...

  6. java jdom 更新xml_Java中使用JDOM来修改XML文档(续前)

    22.3.2 使用JDOM来处理XML文档 本节介绍使用JDOM来处理之前建立的XML文档"customer.xml",包括添加.删除以及修改XML文档中的元素.步骤如下. (1) ...

  7. 对Xml文档进行操作(修改,删除)

    <?xml version="1.0" encoding="utf-8"?> <Products>   <Product id=& ...

  8. 用Castor 处理XML文档

    --Castor可以完成Java和XML的相互转换 前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/20 ...

  9. 用Castor处理XML文档

    --Castor可以完成Java和XML的相互转换 前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/20 ...

最新文章

  1. 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫
  2. CentOS安装ElasticSearch及其问题解决
  3. mysql user.isd_如何实现MySQL中的用户管理
  4. ngx_lua 模块
  5. [转]我们需要IQ吗?--敬以此文献给和我一样迷茫,浮躁的人,共勉!
  6. cxf 本地wsdl_cxf使用wsdl文件生成代码
  7. C++中的deque、stack、queue及priority_queue
  8. 【Python】求多个字符串的最长公共前缀
  9. python 图表_用 Python 让你的数据图表动起来
  10. js中短路运算符 ||
  11. ListView提示和技巧
  12. PHP字符编码绕过漏洞总结
  13. ubuntu12.04 安装 coreseek 4.1beta (转)
  14. Hyperledger Fabric教程(13)-- 集成CouchDB作为状态数据库
  15. 五子棋c语言编程软件,C语言实现五子棋游戏
  16. 深度 | 苹果略胜微软一筹,为什么说 ARKit 是 AR 的最好选择?
  17. 项目微商城的抽奖活动小结
  18. FND Debug Log FND LOG MESSAGES
  19. tar linux 跳过解压,【linux命令】linux解压压缩命令tar详解以及压缩的时候如何跳过某一个压缩目录或文件...
  20. 为何明朝宦官当道如此严重?

热门文章

  1. PHP Zend Studio9.0怎么把代码搞成和服务器端的同步(就是直接在服务器端修改)
  2. 事件总线帧---Otto
  3. ps -eo 用户自定义格式显示
  4. 开发落网电台windows phone 8应用的计划(10)-----收尾
  5. 数据仓库项目管理面试题整理(十二)
  6. [Svn不提交Classes文件夹下的文件][SVN不交付Classes解决方案]
  7. angualr Http error处理
  8. 并发编程--进程池与线程池-练习3
  9. python中的多进程与多线程(一)
  10. Linux 查看dns运行状态