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

📄 packet.h

📁 VC6。0用CMarkup类解析一个XML文件的例子。
💻 H
字号:


#ifndef __PACKET__H__
#define __PACKET__H__ 


#include "DOMElement.h"
#include "DOMDocument.h"

#define ERRORMSGSIZE    512

typedef struct _REF_INPUT
{
	string sTag;
	string sAttr;
	string sValue;
	DOMElement* sFoundElement;
}REF_INPUT;


/*************************************
	函数名:SearchElementCell
	描述: 设置元素属性
	输入:
	 	pElement
		szinBuf
	输出:
	       TRUE:  成功
	       FALSE: 失败
*************************************/
int SECellByName(DOMElement* pElement,void *pRef);
int SECellByAttr(DOMElement* pElement,void *pRef);

/***********************************
  类名:CPacket
  描述:用于通讯包描述,其核心为一Dom树
************************************/

class CPacket
{
public:
	CPacket();
	~CPacket();
	
	/*************************************
	 函数名:BuiltTree
	 描述: 根据XMl字串/文件生成DOM树
	 输入:文件路径/字串,长度
	 输出:
	        0:  成功
	        -1: 失败
	 *************************************/	
	int BuiltTree(MLPCSTR pXmlPath);
	int BuiltTree(const char* pBuf,int nBufSize);

	/*************************************
	 函数名:SearchElement
	 描述: 查找节点/根据节点名,属性查找节点
	 输入:节点的名字,属性
	 输出:
	        节点:  成功
	        NULL: 失败
	 *************************************/	
	DOMElement * SearchElement(char * szNodeName);
	DOMElement * SearchElement(char * szNodeName,char * szProper,char * szId);
	
	/*************************************
	 函数名:SearchNextElement
	 描述: 查找当前节点的下一个节点
	 注意: 无参数的需要与SetCurrentElement函数配合使用
	 输入:节点的名字,路径,属性
	        pMoveNext: 是否将当前节点设置成下一个节点
	 输出:
	        节点:  成功
	        NULL: 失败
	 *************************************/	
	//查找当前节点的下一个节点
	DOMElement * SearchNextElement(bool pMoveNext = TRUE);
	DOMElement * SearchNextElement(char *szNodeName,char *szProper = NULL,char *szId = NULL);
	
	/*************************************
	 函数名:SetCurrentNode
	 描述: 设置当前节点
	 输入:节点的全路径
	 输出:
	        TRUE:  成功
	        FALSE: 失败
	 *************************************/
	bool SetCurrentElement(char szNodeName[]);	
	void SetCurrentElement(DOMElement * elem) { m_CurrentElement = elem; };
	
	/*************************************
	 函数名:GetNodeValue
	 描述: 获得节点
	 输入:
	 	szNodeName:可以是相对当前节点路径或全路径
	 		    ".\"表示当前节点
	 	szOutBuf  : 输出字符串值
	 输出:
	        TRUE:  成功
	        FALSE: 失败
	 *************************************/
	bool GetElementValue(char * szNodeName, char * szOutBuf);
	bool GetElementValue(char * szNodeName, char * szOutBuf, char * szProper, char * szId);
	
	
	/*************************************
	 函数名:SetNodeValue
	 描述: 获得节点
	 输入:
	 	szNodeName :可以是相对当前节点路径或全路径,
	 	szinBuf    : 输入的字符串值
	 输出:
	        TRUE:  成功
	        FALSE: 失败
	 *************************************/
	bool SetElementValue(char * szNodeName, char * szinBuf);	
	bool SetElementValue(DOMElement * pelem, char * szinBuf);
	
	
	/*************************************
	 函数名:GetElementAttr
	 描述: 读取元素属性
	 输入:
	 	szNodeName :可以是相对当前节点路径或全路径,
	 	szinBuf    : 输入的字符串值
	 输出:
	        TRUE:       成功
	        FALSE:      失败
	        szAttrValue:属性的值
	 *************************************/
	bool GetElementAttr(char * szNodeName, char * szAttrName, string& szAttrValue);	
	bool GetElementAttr(DOMElement * pelem, char * szAttrName, string& szAttrValue);
	
	
	/*************************************
	 函数名:SetElementAttr
	 描述: 设置元素属性
	 输入:
	 	szNodeName :可以是相对当前节点路径或全路径,
	 	szAttrName : 属性名称
	 	szAttrValue: 属性值
	 输出:
	        TRUE:  成功
	        FALSE: 失败
	 *************************************/
	bool SetElementAttr(char * szNodeName, char * szAttrName, char * szAttrValue);	
	bool SetElementAttr(DOMElement * pelem, char * szAttrName, char * szAttrValue);


public:

	//返回文档的对象
	DOMDocument * GetDOMDocument() { return &m_DomTree; };
	
	//返回XML的文本串
	string GetXml(DOMElement* pElement);
	
	//设置根节点的标签
	int SetRootTag(string pTag);
	
	//创建节点,可以用相对路径和绝对路径
	DOMElement * CreateElement(char szNodeName[]);
	
	//重置当前节点到根节点
	void ResetCurrentNode();


private:

	//切分字符串,放在一个容器中(内部函数)
	int split_bychar(vector<string> & vec, const string& str, const char seperate='/');
	
	/*************************************
	 函数名:Initialize
	 描述: 用于生成包的初始化
	 输入:n/N
	 输出:
	        TRUE:  成功
	        FALSE: 失败
	*************************************/
	bool Initialize();

	
private:
	/*dom树存储了包结构*/
	DOMDocument m_DomTree;
	DOMElement  * m_CurrentElement;	
	

	int m_LastError;
	bool m_bInitFlag;
	
	// 当前tag名
	string m_CurrentTag;
	string m_CrrentAttr;
	string m_CrrentValue;
	DOMElement* m_FoundElement;
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -