最近手头上有个活在忙,中间很重要的一部分就是用C语言将.XML文件中想要的key和value读出来,与之前已有的值进行比较。
核心的.XML文件的格式如下:
<group> <key> <curDefault>zzz</curDefault> <history> <value>xxx</value> <value>yyy</value> </history> </key> </group>
而我的思路是这样的:
1.将整个文件读到一个buf中;
2.去掉不需要的头部分;(<? xml ?>)
3.采用下降递归的方法,获取到每一个人tag 和 content;
其中用到的结构体有:
typedef struct XML_SEGMENT{ char *str; int len; }XML_SEGMENT;
typedef enum{ XML_ELEMENT_CONTENT=1,XML_TEXT_CONTENT,XML_DECLARE_CONTENT }xml_content_t;
typedef struct{ XML_ATTR_PAIR *array; int cnt; }XML_ATTRIBUTE;
</pre><pre name="code" class="cpp">
typedef struct XML_LIST{ XML_SEGMENT tagname; XML_ATTRIBUTE attr; XML_SEGMENT content; xml_content_t type; XML_SEGMENT realm; int depth; struct XML_LIST *parent; struct XML_LIST *first_child; struct XML_LIST *prev_sibling; struct XML_LIST *next_sibling; }XML_LIST;