⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wp_exmldoc.h

📁 电力故障信息采集,主要是针对南自的保护装置,这个程序用在Linux操作系统下
💻 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 + -