📄 wp_exmldoc.h
字号:
#ifndef __WP_EXML_DOC_H__#define __WP_EXML_DOC_H__#include "WP_EXMLGlobal.h"class WP_EXMLNode;/// XML的文档包装类class WP_EXMLDoc{public: /// 从内存装载XML bool LoadXML(const char* pszXML); /// 从文件装载XML bool LoadXMLFromFile(const char* pszFile); /// 保存XML为文件 bool SaveXMLToFile(const char* pszFile); /// 设置XML的版本及编码方式 void SetXMLVerAndEncode(const char* pszVer, const char* pszEncode); /// 设置XML的根节点 void SetRootNode(WP_EXMLNode* pNode); /// 得到XML的根节点 WP_EXMLNode *GetRootNode(); void GetXML(std::string& strXML); const char* GetXML(); void ToXML();private: // = 内部解析函数 /** * 解析XML,组织数据 * 1. 不考虑版本,仅支持1.0。错误包括:未找到与版本开头的'<'相对应的'>', * 其他不认为为错误(如寻找过程中有遇到'\n'等) * 2. 不考虑注释,跳过注释。错误包括:未找到与注释开头的'<'相对应的'>', * 其他不认为为错误(如寻找过程中有遇到'\n'等) * 3、支持转义 * 4、关于编码:程序不对XML编码 * pszCursor为XML数据游标,成功返回true,失败返回false。 */ bool ParseXML(const char* &pszCursor); /** * 提取一个节点 * pszXML为指向XML字符串中节点起始标志'<'的下一个字符。函数成功返回时, * 指向XML字符串中节点结束标志'>'后一个字符。成功返回true;失败返回false, * XML解析失败。 */ bool PickXMLNode(const char* &pszXML); /** * 提取一个节点名 * pszPre为指向XML字符串中节点起始标志'<'的下一个字符。函数成功返回时, * 指向XML字符串中节点名称后一个字符。函数成功返回时,strName存放节点名称。 * 成功返回true;失败返回false,XML解析失败。 * * 节点名称: * 1. 名称中可以包含字母、数字以及其它字母 * 2. 名称不能以数字或"_" (下划线)开头 * 3. 名称不能以字母 xml(或 XML 或 Xml ..)开头 * 4. 名称中不能包含空格 * 5. 名称中间不能包含":"(冒号) */ bool PickNodeName(const char* &pszXML, std::string &strName); /** * 提取一个节点值 * 节点值起始标志为>,结束标志为<。属性值可以为空。 */ bool PickNodeValue(const char* &pszXML, std::string &strValue); /** * 检查节点完整匹配性 * pszXML为指向XML字符串中节点名称的起始字符。函数成功返回时,指向XML字符 * 串中节点结束标志'>'后一个字符。成功返回true;失败返回false,XML解析失败 * (节点完整:形如<node1> ... </node1>,即<node1>和</node1>应该成对出现)。 */ bool CheckNodeName(const char*& pszXML); /** * 提取节点属性 * pszXML,如果为获得节点名称后调用,则指向本次将要获取属性所属节点的节点 * 名称后一个字符。如果为递归调用,则指向上一次调用所获得节点属性值后可能 * 为又一个节点属性名称前一个字符。函数成功返回时,指向XML字符串中节点结束 * 标志'>'后一个字符。成功返回true;失败返回false,XML解析失败。 * */ bool PickAttribute(const char* &pszXML); /** * 提取一个属性的名称 * pszXML, 指向本次将要获取属性名称所属节点的节点名称后一个字符。函数成功 * 返回时,指向本次将要获取属性名称的后一个字符。strAttrName,函数成功返回 * 时,存放属性名称。成功返回true;失败返回false,XML解析失败。 * * 属性名称: * 1. 名称中可以包含字母、数字以及其它字母 * 2. 名称不能以数字或"_" (下划线)开头 * 3. 名称不能以字母 xml(或 XML 或 Xml ..)开头 * 4. 名称中不能包含空格 * 5. 名称中间不能包含":"(冒号) */ bool PickAttributeName(const char* &pszXML, std::string &strAttrName); /** * 提取一个属性的值 * pszPre, 指向本次将要获取属性所属节点的节点名称后一个字符。函数成功返回 * 时,指向本次获取属性值的结束标志('"')的后一字符。strName,函数成功返回时, * 存放属性名称。成功返回true;失败返回false,XML解析失败。 * * 属性值:属性值起始结束标志均为双引号,或者均为单引号。属性值可以为空。 */ bool PickAttributeValue(const char* &pszXML, std::string &trAttrName);public: WP_EXMLDoc(); virtual ~WP_EXMLDoc();private: /// XML Doc的版本XML描述 std::string m_strVerXML; /// XML根节点 WP_EXMLNode* m_pRoot; /// 子节点组,用于节点完整性检查 std::stack< WP_EXMLNode*, std::list<WP_EXMLNode*> >m_stackNode;protected: /// 格式化控制: Tab计数 int m_nFomatTABs; friend class WP_EXMLNode;};#endif // #define __WP_EXML_DOC_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -