libxml2如何配合php使用,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
本文原创发布php中文网,转载请注明出处,感谢您的尊重!
libxml2如何配合php使用,libxml2实现xml文档的节点的修改相关推荐
- php循环获取xml节点,PHP_PHP遍历XML文档所有节点的方法,本文实例讲述了PHP遍历XML文档 - phpStudy...
PHP遍历XML文档所有节点的方法 本文实例讲述了PHP遍历XML文档所有节点的方法.分享给大家供大家参考.具体实现方法如下: 1. contact.xml代码: J J J Manager Nati ...
- Xml文档添加节点和属性
在实际的应用开发中需要我们对xml进行添加节点和属性,动态的去完成,在这之前,先看看XmlNode和XmlElement之间的关系 1.XmlElement继承XmlLinkedNode又继承XmlN ...
- 使用Libxml2操作XML文档
一.Libxml2介绍: Libxml2 是一个xml的c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件.它除了支持c语言版以外,还支持c++.PHP ...
- XML文档操作工具类
1 /// <summary> 2 /// XML文档操作工具类 3 /// </summary> 4 public class XmlUtil 5 { 6 #region X ...
- python批量生成,用python批量生成简单的xml文档
最近生成训练数据时,给一批无效的背景图片生成对应的xml文档,我用python写了一个简单的批量生成xml文档的demo,遇见了意外的小问题,记录一下. 报错问题为:ImportError: No m ...
- java jdom 更新xml_Java中使用JDOM来修改XML文档(续前)
22.3.2 使用JDOM来处理XML文档 本节介绍使用JDOM来处理之前建立的XML文档"customer.xml",包括添加.删除以及修改XML文档中的元素.步骤如下. (1) ...
- 对Xml文档进行操作(修改,删除)
<?xml version="1.0" encoding="utf-8"?> <Products> <Product id=& ...
- 用Castor 处理XML文档
--Castor可以完成Java和XML的相互转换 前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/20 ...
- 用Castor处理XML文档
--Castor可以完成Java和XML的相互转换 前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/20 ...
最新文章
- 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫
- CentOS安装ElasticSearch及其问题解决
- mysql user.isd_如何实现MySQL中的用户管理
- ngx_lua 模块
- [转]我们需要IQ吗?--敬以此文献给和我一样迷茫,浮躁的人,共勉!
- cxf 本地wsdl_cxf使用wsdl文件生成代码
- C++中的deque、stack、queue及priority_queue
- 【Python】求多个字符串的最长公共前缀
- python 图表_用 Python 让你的数据图表动起来
- js中短路运算符 ||
- ListView提示和技巧
- PHP字符编码绕过漏洞总结
- ubuntu12.04 安装 coreseek 4.1beta (转)
- Hyperledger Fabric教程(13)-- 集成CouchDB作为状态数据库
- 五子棋c语言编程软件,C语言实现五子棋游戏
- 深度 | 苹果略胜微软一筹,为什么说 ARKit 是 AR 的最好选择?
- 项目微商城的抽奖活动小结
- FND Debug Log FND LOG MESSAGES
- tar linux 跳过解压,【linux命令】linux解压压缩命令tar详解以及压缩的时候如何跳过某一个压缩目录或文件...
- 为何明朝宦官当道如此严重?
热门文章
- PHP Zend Studio9.0怎么把代码搞成和服务器端的同步(就是直接在服务器端修改)
- 事件总线帧---Otto
- ps -eo 用户自定义格式显示
- 开发落网电台windows phone 8应用的计划(10)-----收尾
- 数据仓库项目管理面试题整理(十二)
- [Svn不提交Classes文件夹下的文件][SVN不交付Classes解决方案]
- angualr Http error处理
- 并发编程--进程池与线程池-练习3
- python中的多进程与多线程(一)
- Linux 查看dns运行状态