|
Chamoro 新版的XML解析器(2) int (*SaveToFile) (QXml *self,char *fileName); char *(*GetErrText) (QXml *self); int (*GetDeclareData) (QXml *self,QString *data); void (*Release) (QXml *self); }QXmlVtbl; 是指针函数调用就像这样 xml.lpVtbl->ToRoot(&xml); ToRoot 的作用就是到一个节点,宣告不算是第一个节点的 ParseFile 解析一个文件名 ParseBuff 解析一段字符串 SaveToFile 将解析内容保存成文件 GetErrText 嗯.这个还没有做 :P GetDeclareData 是生成宣告的字符串 Release 就是释放,整个程序中,除了QXml可以释放以外其他的像QXmlNode 的 请不要手工释放(应该设计相应的删除或消除函数)!由QXml自己管理 :( C语言的安全性就是没有C++好 这是正常的xml调用,也就是解析.保存. 当然了.你可以通过操作Node来维护或创建一个XML文件 QXmlNode 的结构如下 struct tagQXmlNode { QString m_szName; QString m_szValue; int m_nType; QList m_listAttrib; QXmlNode *m_nodeChild; QXmlNode *m_nodeNext; QXmlNode *m_nodePrev; QXmlNode *m_nodeParent; QXmlNodeVtbl *lpVtbl; }; 这是比较典型的树型结构 调用和操作方法和QXml类似,只是函数不同而已,我就把主要的函数说一下. typedef struct QXmlNodeVtbl {
QXmlNode *(*ToParent) (QXmlNode *self); // 返回父节点,如果为空,应该就是"根"节点了 QXmlNode *(*ToChild) (QXmlNode *self,char *name); //到子节点,如果name为空.到第一个节点, QXmlNode *(*ToNextNode) (QXmlNode *self,char *name); //下一节点,如果name为空.就到下一个节点.否则到下一个name的节点 QXmlNode *(*ToPrevNode) (QXmlNode *self,char *name); //同上,不同的是到上一个节点 QXmlNode *(*ToFirstChild) (QXmlNode *self); //到第一个子节点 QXmlNode *(*ToLastChild) (QXmlNode *self); //到最后一个子节点 BOOL (*AddChild) (QXmlNode *self,char *name ,char *value);
|