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中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值