当前位置:C++技术网 > 资讯 > 遍历的xml文件的帮助库xmlhelper

遍历的xml文件的帮助库xmlhelper

更新时间:2016-05-19 11:32:57浏览次数:1+次

因为需要,使用了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);

	};