|
Chamoro 新版的XML解析器(1)
Chamoro 使用说明 主要分三部分: 1.XML结构操作部分 一般的节点选择以及建立,查询,删除和属性的管理 2.XML数据解析部分 解析XML原始数据成XML结构 3.XML数据源操行部分 提供多种的数据来源,支持内存中的字符串,文件,pipe,socket等等 说之前,需要简单说明一下,Charmoro并不完全支持xml1.0的规范,只是小部分,另外, 对汉字的支持,这个版本里没有加入unicode的支持,不同于原先的TXML,所以在处理汉字时, 希望你能自己测试一下 ,但对gb2312的支持是很好的 :) 另外,xml 1.0里规定只能有一个根节点,但这个解析器支持多个"根"节点的,也就是说, 没有根节点的说法,只有第一个节点的说法,所以,如果要和其他解析器协同工作时,需要注意 这点尽量不要写多个的"根"节点(在xml1.0里注释是不算在节点的,所以说可以你可以有多个的 注释,但尽量少几个"根"节点)
先说说第一部分: Chamoro 支持的类型有: enum NODETYPE { DECLARE, /*宣告*/ DISPOSE, /*处理 :) */ NODE, /*节点*/ COMMENT, /*注释*/ HOLD, /*原样*/ UNKNOW /*未知*/ }; (1).DECLARE, /*宣告*/ 也就是<?xml version="1.0"?>这行 (2).DISPOSE, /*处理*/ 这个版本中暂时不支持,一般来说就是以<!或<?开头的,但不 不是宣告(<?xml)或注释<?> (3).NODE, /*节点*/ 这是XML最常见的节点,包括属性 (4).COMMENT, /*注释*/ 注释节点以"<!--"开头和"-->"结尾的 (5).HOLD /*原样*/ CDATA 值,这个节点和<NODE>的基本功能是一样的,不同的是 节点的值不需要进行转义(关于转义内容,我会在后面补充一下) 主要是两个结构体 strUCt tagQXml { QStringList m_listDeclare; /* 宣告的链表,存储QString :) */ QXmlNode *m_nodeRoot; int m_nErrorCode; QXmlVtbl *lpVtbl; unsigned long m_nRow; unsigned long m_nCol; }; tagQXML 是XML的基本结构,一般的调用方法就是 QXml xml = NewQXml(); 如果需要指针结构的,那就用 QXml *xml = MallocQXml(); PS: 这个程序的调用方法基本上是这样的,调用方法有点怪怪的 :) QXML 的主要函数在: typedef struct QXmlVtbl { QXmlNode *(*ToRoot) (QXml *self); int (*ParseFile) (QXml *self,char *fileName); int (*ParseBuff) (QXml *self,char *buff);
|