熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C語言實現的XML解析器[1]

2013-11-13 10:58:39  來源: .NET編程 

  最近做嵌入式開發板子上面需要有解析XML的功能理所當然地我就去網上找開源的來用結果找來的要不是C++的要不就是超級復雜的像libxml我統計了下解析一個幾KB的XML文件居然動態申請內存多次對於沒有mmu功能的arm真是無福消受了

  所以我只能自己寫一個來用了

  我寫的這個xml解析器非常簡單核心代碼只有多行當然功能也相對弱些只支持ansi編碼的xml文件只能解析不能生成

  整個解析器只用到了 若干條 EBNF文法 和 一個DFA狀態機 (用來跳過注釋的) 采用了遞歸下降的分析方法

   整個解析過程沒有動態申請內存不會造成內存碎片(特別適應於沒有mmu的設備) 當然在開始解析之前還是需要提供一片緩沖給解析器用的最後生成的XML樹就放在這片緩沖裡面

  接口如下:

/******************************************************
/* minixmlh
/*
/* author:@#$%^&*
/*
/* about:
/* 該文件提供根據解析XML文件功能
/*
/*
/* sample:
/*
/* 支持平台: windows linux uclinux
/* [in] 表示是輸入參數
/* [out] 表示是輸出參數
/******************************************************/
#ifndef _MINIXML_H___
#define _MINIXML_H___
#define _CRT_SECURE_NO_DEPRECATE

#if defined (__cplusplus) || defined (c_plusplus)
extern C {
#endif

struct _MINI_XML_ATTRI;
struct _MINI_XML_NODE;

/* 記錄一個屬性信息 */
typedef struct _MINI_XML_ATTRI
{
char* name; /* 屬性名 */
char* value; /* 屬性值 */
struct _MINI_XML_ATTRI* next; /* 指向下一個屬性 */
} MINI_XML_ATTRI;

/* 記錄一個XML節點信息 */
typedef struct _MINI_XML_NODE
{
char* name; /* 節點名 */
char* value; /* 節點值 */

MINI_XML_ATTRI* attri_list; /* 屬性列表 */
struct _MINI_XML_NODE* parent; /* 父節點 */
struct _MINI_XML_NODE* child; /* 子節點 若沒有則為空 */
struct _MINI_XML_NODE* next; /* 同層下一節點 */
} MINI_XML_NODE;

[]  []  


From:http://tw.wingwit.com/Article/program/net/201311/14907.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.