因为需要,使用了tinyxml读取xml文件,通常我读的文件格式为
<info>
<name value = "张三" />
<name value = "李四" />
</info>
tinyxml里面的handle并不能满足我访问的需求,所以自己写了一个只针对element检索的库。
项目路径如下(可以打开网址下载)
https://git.coding.net/ooklasd/TinyXmlHelper.git
关于怎么使用请看这里《windows git的安装与使用》
找个文件夹 右键clone就可以下载到了。
以下是头文件,全部功能都在里面了,如果有需要可以下载使用
里面有一些xmlnode reade之类的,我只是自己用而已,你们用不到的话就不需要管它了
namespace xml
{
class XMLNode;
class XMLHelper :public XMLNode
{
XMLHelper(TinyXml::TiXmlElement* element):XMLNode(element){}
XMLHelper(const TinyXml::TiXmlElement* element):XMLNode(element){}
XMLHelper(const std::string filepath):XMLNode(filepath){}
public:
XMLHelper& operator=(const XMLHelper& rhs);
static XMLHelper Create(TinyXml::TiXmlElement* element);
static const XMLHelper Create(const TinyXml::TiXmlElement* element);
static XMLHelper Create(const std::string filepath);
//===================================
// operater操作类函数
//===================================
XMLHelper& Attr(const std::string& name,const std::string& value);
XMLHelper& Attr(const std::string& name,int value);
XMLHelper& Attr(const std::string& name,double value);
std::string Attr(const std::string& name) const ;
//获取一个属性,若为空或不存在则返回默认值
std::string AttrDefault(const std::string& name,const std::string& DefaultValue) const ;
//==========================================
// search搜索类函数
//==========================================
//获取第一个该路径的节点,如"info/user"则返回第一个user
//获取第一个该路径的节点,如"info/user/*"则返回user系啊所有节点
template<typename T>
XMLHelper GetElement(const std::string& path,T& funcClass);
template<typename T>
const XMLHelper GetElement(const std::string& path,T& funcClass)const;
//获取第一个该路径的节点,如"info/user"则返回第一个user
XMLHelper GetElement(const std::string& path);
const XMLHelper GetElement(const std::string& path) const;
//获取第一个该路径的节点,不支持*,如"info/user"则返回一个user,没有则创建
XMLHelper Touch(const std::string& path);
template<typename T>
XMLHelper Touch(const std::string& path,T& path);
//获取所有该路径的节点,如"info/user"则返回所有info下面的user标签
//获取第一个该路径的节点,如"info/user/*"则返回user系啊所有节点
template<typename T>
std::list<XMLHelper> GetElements(const std::string& path,T& funcClass);
template<typename T>
std::list<const XMLHelper> GetElements(const std::string& path,T& funcClass) const;
//获取所有该路径的节点,如"info/user"则返回所有info下面的user标签
//获取第一个该路径的节点,如"info/user/*"则返回user系啊所有节点
std::list<XMLHelper> GetElements(const std::string& path);
std::list<const XMLHelper> GetElements(const std::string& path) const;
//获取父亲节点
XMLHelper GetParent();
const XMLHelper GetParent()const;
//获取根节点
const XMLHelper Root() const ;
XMLHelper Root() ;
private:
//从子节点开始,定位到某个节点
TinyXml::TiXmlElement* LocateToPath(const std::string& path)
{
return const_cast<TinyXml::TiXmlElement*>(const_cast<const XMLHelper*>(this)->LocateToPath(path));
}
const TinyXml::TiXmlElement* LocateToPath(const std::string& path) const ;
static std::list<std::string> PathToList(const std::string& path);
};