分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
C++程序有时候要读写XML文件, 这里介绍一个读写XML文件的库——Libxml2。
主页:http://xmlsoft.org/index.html
入门教程很详细的:http://jianlee.ylinux.org/Computer/C/libxml.html#sec11
读取节点内容的话用XPath方式比较好,要问XPath与Libxml2库之间的关系,有个很形象的比喻:
那就是SQL与数据库之间的关系。
下面的代码是在Linux下实现的:
- #ifndef __XML_FILE_H__
- #define __XML_FILE_H__
- #include <stdio.h>
- #include <stdlib.h>
- #include <libxml/parser.h>
- #include <libxml/tree.h>
- #include <map>
- #include <string>
- #include <iostream>
- using namespace std;
- const int XML_READ = 1;
- const int XML_WRITE = 0;
- typedef struct _XML_INFO XML_INFO;
- typedef struct _XML_INFO* HXML_INFO;
- struct _XML_INFO
- {
- char version[16];
- int update;
- int scan_speed;
- int type;
- int device_counts;
- int item_counts;
- map<string, string> map_item_info;
- };
- class CLibxml2
- {
- public:
- CLibxml2();
- ~CLibxml2();
- CLibxml2(const char *xml_file_path, bool is_read);
- /*!
- \fn bool open(const char *xml_file_path, bool is_read)
- \brief 打开一个XML文件是以读的方式还是以写的方式
- \param in xml_file_path XML文件路径
- \param in is_read true为读,false为写
- \return true成功,false失败
- */
- bool open(const char *xml_file_path, bool is_read);
- /*!
- \fn bool parse_xml_file(XML_INFO &xml_info)
- \brief 解析XML文件,将解析后的结果保存在XML_INFO结构体中
- \param out xml_info 保存解析后的结果
- \return true成功,false失败
- */
- bool parse_xml_file(const XML_INFO &xml_info);
- /*!
- \fn bool save_xml_file(const XML_INFO &xml_info)
- \brief 写入XML文件
- \param in xml_info 需要写入的信息
- \return true成功,false失败
- */
- bool save_xml_file(XML_INFO &xml_info);
- private:
- /*!
- \fn xmlNodePtr search_node_ptr(const char *sz_expr)
- \brief 查找指定节点
- \param in sz_expr 节点路径表达式(XPATH)
- \return success返回指定节点指针,fail返回NULL
- */
- xmlNodePtr search_node_ptr(const char *sz_expr);
- private:
- char m_sz_path[512];
- xmlDocPtr m_pdoc_read;
- xmlNod