亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xmlwf.c

?? 一個基于SAX分析方法的XML文檔解析函數包
?? C
?? 第 1 頁 / 共 3 頁
字號:

//#include "CommonData.h"
#include "StringProcess.h"
#include "CharSet.h"
#include "XMLwf.h"
#include "NetWork.h"
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

#define XML_ASSERT(x)  if(x==NULL){((PXML_Parser)parser)->parserErrorHandler(((PXML_Parser)parser)->userData,"Error_in_system:Out_Of_memory");return NULL;}
#define XML_ASSERT_VOID(x)  if(x==NULL){((PXML_Parser)parser)->parserErrorHandler(((PXML_Parser)parser)->userData,"Error_in_system:Out_Of_memory");return;}

/*start_attribute define*/
/*define a element structure of the attibute and the operations about it.*/
typedef struct attElement{
	PXML_String name;
	PXML_String value;
	struct attElement* next;
} AttriPairs;
typedef AttriPairs* PAttriPairs;

void AttriPairsFree(PAttriPairs p)
{
	free(p->name);
	free(p->value);
	free(p);
}

PAttriPairs AttriPairsCreate(const XML_Char* name, const XML_Char* value)
{
	enum XML_STR_PRO_Error t;
	PAttriPairs pAP = malloc(sizeof(AttriPairs));
	if(pAP == NULL) return NULL;
	pAP->name = CreateXML_String();
	if(pAP->name  == NULL) {
		free(pAP);
		return NULL;
	}

	pAP->value = CreateXML_String();
	if(pAP->value == NULL){
		free(pAP);
		return NULL;
	}
	t = XML_StrPCharCat(pAP->name, name);
	if(t != STRING_SUCCESS ){
		free(pAP);
		return NULL;
	}
	t = XML_StrPCharCat(pAP->value, value);
	if(t != STRING_SUCCESS ){
		free(pAP);
		return NULL;
	}

	pAP->next = NULL;
	return pAP;
}

/*define attibutes structures and the operations on it.*/
typedef struct{
	int size;
	PAttriPairs pairsHead;
	PAttriPairs pairsTail;
} Attributes;
typedef Attributes* PAttributes;

PAttributes AsPAttributes(void* p)
{
	return (PAttributes)p;
}

void IniAttributes(PAttributes p)
{
	p->size = 0;
	p->pairsHead = NULL;
	p->pairsTail = NULL;
}

PAttributes AtrributesCreate()
{
	PAttributes pAttri = malloc(sizeof(Attributes));
	if(!pAttri) return NULL;
	IniAttributes(pAttri);
	return pAttri;
}

void AttributesFree(PAttributes pAttri)
{
	int i = 0;
	PAttriPairs current = NULL;
	PAttriPairs next = NULL;
	
	if(!pAttri) return;
	current = pAttri->pairsHead;
	if(current) next = current->next;

	for(;i<pAttri->size; i++){		
		free(current);
		current = next;
		if(next) next = next->next;
	}
	
	free(pAttri);	
}

void addAttribute(Patrributes desti, PAttriPairs  attri)
{
	PAttributes destination = AsPAttributes(desti);

	if(!desti || !attri) return;

	if(!destination->size){
		destination->pairsHead = attri;
		destination->pairsTail = attri;
	}else{
		destination->pairsTail->next = attri;
		destination->pairsTail = attri;
	}	
	destination->size++;
}

enum XML_Error addAttriPairs(PAttributes destination, const XML_Char* name, const XML_Char* value)
{
	PAttriPairs attri = AttriPairsCreate(name, value);
	if(attri == NULL) return ADD_ATTRI_ERROR;
	addAttribute(destination, attri);
	return XML_SUCCESS;
}

PAttriPairs GetAttributeByIndex(const PAttributes attributes, int index)
{
	int i = 0;
	PAttriPairs current = NULL;

	if(!attributes) return NULL;	
	if(index >=attributes->size ) return NULL;	

	current = attributes->pairsHead;	
	for(;i < index;i++)
		current = current->next;
	return current;
}

PAttriPairs GetAttributeByName(const PAttributes attributes, const XML_Char* name)
{
	int i = 0;
	PAttriPairs current = NULL;

	if(!attributes) return NULL;
	if(!attributes->size) return NULL;

	current = attributes->pairsHead;
	for(;i < attributes->size;i++){
		if(!XML_StrPCharCmp(current->name, name)) return current;
		current = current->next;
	}

	return NULL;
}

const XML_Char* __GetNameFromAttriByIndex(void* attri, int index)
{
	PAttriPairs p = NULL;
	PAttributes attributes = AsPAttributes(attri);
	p = GetAttributeByIndex(attributes, index);
	if(p) return p->name->data;
	else return NULL;
}

const XML_Char* __GetValueFromAttriByIndex(void* attri, int index)
{
	PAttriPairs p = NULL;
	const PAttributes attributes = AsPAttributes(attri);
	p = GetAttributeByIndex(attributes, index);
	if(p) return p->value->data;
	else return NULL;
}

const XML_Char* __GetValueByName(void* attri, const XML_Char* name)
{
	const PAttributes attributes = AsPAttributes(attri);
	PAttriPairs attriPairs = NULL;
	attriPairs = GetAttributeByName(attributes, name);
	if(!attriPairs) return NULL;
	return attriPairs->value->data;
}
//end attribute define


_BOOL IsMemberOf(const XML_Char member, const XML_Char* set, int sizeOfSetElement)
{
	int size = sizeOfSetElement;
	int i =0;

	for(;i < size; i++)		
		if(member == set[i]) return TRUE;	
	
	return FALSE;
}

_BOOL IsMemberOfInt(const int member, const int* set, int sizeOfSetElement)
{
	int size = sizeOfSetElement;
	int i =0;

	for(;i < size; i++)
		if(member == set[i]) return TRUE;	

	return FALSE;
}

//begin the functions to process the recusion down analysis.
int row = 1;
int col = 1;

XML_Char buffer[BUF_SIZE + 2];/* The buffer to store the XML_Char from data source.*/
int		 cursor = 2; /*The cursor point the current XML_char in use in 'buffer'.*/
int		 inputType;/*Record the type of input data source.*/
unsigned int sock = -1;/*The SOCKET for data getting from web.*/
FILE* inputStream = NULL;/*The pointer of the stream of file. */
int	     encodingType = ANSI;/*The type of the file*/

void RefreshBuffer()
{
	int				i;
	unsigned short  in;
	unsigned char	tmpChar;
#ifdef XML_UNICODE
	unsigned char	tmpBuf[BUF_SIZE];	
#else
#endif

	buffer[0] = buffer[BUF_SIZE];
	buffer[1] = buffer[BUF_SIZE + 1];
	if(inputType == XML_FILE_NAME || inputType == XML_FILE_STREAM)
		if(encodingType == UNICODE_){
			for(i = 2;i<BUF_SIZE + 2; i++){
				if(feof(inputStream))  break;
				buffer[i] = fgetc(inputStream);
				if(feof(inputStream))  break;
				in = fgetc(inputStream);				
				if(in){
					buffer[i]	= buffer[i]&0x00FF;
					in			= in<<8;									
					buffer[i]	= buffer[i]|in;
				}
			}
		}else if(encodingType == UNICODE_B){
			for(i = 2;i<BUF_SIZE + 2; i++){
				if(feof(inputStream))  break;
				buffer[i] = fgetc(inputStream);				
				if(feof(inputStream))  break;
				in = fgetc(inputStream);
				if(in == 0xFFFF) return;
				if(in){
					buffer[i]	= buffer[i]<<8;
					in			= in&0x00FF;														
					buffer[i]	= buffer[i]|in;
				}		
			}
		}else{
			for(i = 2;i<BUF_SIZE + 2; i++){
				if(feof(inputStream))  break;
				buffer[i]  = fgetc(inputStream);				
			}
		}					
		else if(encodingType == UNICODE_){
			for(i = 2;i<BUF_SIZE + 2; i++){
				if(!HttpStreamGet(sock, &tmpChar, 1))  break;
				buffer[i] = tmpChar;
				if(!HttpStreamGet(sock, &tmpChar, 1))  break;
				in = tmpChar;
				if(in){
					buffer[i]	= buffer[i]&0x00FF;
					in			= in<<8;									
					buffer[i]	= buffer[i]|in;
				}
			}
		}else if(encodingType == UNICODE_B){
			for(i = 2;i<BUF_SIZE + 2; i++){
				if(!HttpStreamGet(sock, &tmpChar, 1))  break;
				buffer[i] = tmpChar;
				if(!HttpStreamGet(sock, &tmpChar, 1))  break;
				in = tmpChar;
				if(in){
					buffer[i]	= buffer[i]<<8;
					in			= in&0x00FF;														
					buffer[i]	= buffer[i]|in;
				}		
			}
		}else{
#ifdef XML_UNICODE
		HttpStreamGet(sock, tmpBuf, BUF_SIZE);
		for(i = 2;i<BUF_SIZE + 2; i++)
			buffer[i] = tmpBuf[i-2];		
#else
		HttpStreamGet(sock, &buffer[2], BUF_SIZE);
#endif			
		}	
	cursor = 2;		
}

XML_Char GetChar()
{
	if(cursor > BUF_SIZE+1) RefreshBuffer();	
	col++;
	return buffer[cursor++];	
}

void GoBack(int step)
{
	if(step == 1) cursor--;
	else cursor = cursor - 2;	
}

void JudgeEncodingType()
{
	int				tmp		= 0;
	unsigned char	nTmp	= 0;

	if(inputType == XML_FILE_NAME || inputType == XML_FILE_STREAM){
		tmp = fgetc(inputStream);
		if(tmp == 0xFF){
			tmp = fgetc(inputStream);
			if(tmp == 0xFE) encodingType = UNICODE_;
			else exit(0);
		}else if(tmp == 0xEF){
			tmp = fgetc(inputStream);
			if(tmp == 0xBB){
				tmp = fgetc(inputStream);
				if(tmp == 0xBF){ encodingType = UTF_8;}
				else exit(0);
			}else exit(0);
		}else if(tmp == 0xFE){
			tmp = fgetc(inputStream);
			if(tmp == 0xFF) encodingType = UNICODE_B;
			else exit(0);
		}else if(tmp == 0xFF){
		}else{
			buffer[1]	= tmp;
			cursor		= 1; 
			encodingType= ANSI;
		}
	}else{
		HttpStreamGet(sock, &nTmp, 1);
		if(nTmp == 0xFF){
			HttpStreamGet(sock, &nTmp, 1);
			if(nTmp == 0xFE) encodingType = UNICODE_;
			else exit(0);
		}else if(nTmp == 0xEF){
			HttpStreamGet(sock, &nTmp, 1);
			if(nTmp == 0xBB){
				HttpStreamGet(sock, &nTmp, 1);
				if(nTmp == 0xBF) encodingType = UTF_8;
				else exit(0);
			}else exit(0);
		}else if(nTmp == 0xFE){
			HttpStreamGet(sock, &nTmp, 1);
			if(nTmp == 0xFF) encodingType = UNICODE_B;
			else exit(0);
		}else encodingType= ANSI;		
	}

	RefreshBuffer();
	if(encodingType == ANSI){
		if(inputType == XML_FILE_NAME || inputType == XML_FILE_STREAM)	buffer[1] = tmp;
		else buffer[1] = nTmp;
		cursor = 1;
	}
}

int initialGlobalVar(unsigned int s, FILE* pf, int type)
{
	if(type<XML_FILE_NAME ||type>XML_URL) return FALSE;
	sock        = s;
	inputStream = pf;
	inputType  = type;
	memset(buffer, '\0', BUF_SIZE+2);
	cursor      = BUF_SIZE+2;
	row         = 1;
	col			= 1;
	encodingType= ANSI;

	JudgeEncodingType();
	return TRUE;
}

void ErrorHappen(Pxml_parser parser,   const char* errorInf)
{
	FILE* log = fopen("c:\\XMLParser.log", "a+");
	if( log != NULL){
		fputs(errorInf, log);
		fputc('\n', log);
	}
	fclose(log);
	
	printf("Error in line %d, colomn %d. %s", row, col, errorInf);

	if(((PXML_Parser)parser)->parserErrorHandler != NULL)    
		((PXML_Parser)parser)->parserErrorHandler( ((PXML_Parser)parser)->userData, errorInf);
	exit(1);
}
/**
Skip the character in 'space'
*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品视频免费在线| 亚洲第一狼人社区| 国产夫妻精品视频| 一区二区三区四区不卡在线| 精品国产污网站| 在线观看视频欧美| 国产精品自拍网站| 亚洲h动漫在线| 国产精品久久久久一区| 精品久久久久久久久久久院品网| 色综合久久久久综合| 国产一区在线视频| 免费高清成人在线| 亚洲影院理伦片| 亚洲人成人一区二区在线观看 | 欧美体内she精高潮| 高清不卡在线观看av| 麻豆极品一区二区三区| 欧美片在线播放| 久久婷婷成人综合色| 国产乱码精品一区二区三区av| 亚洲h在线观看| 国产精品自拍在线| 日本一不卡视频| 午夜欧美视频在线观看| 亚洲精品v日韩精品| 亚洲日本va午夜在线电影| 精品噜噜噜噜久久久久久久久试看| 欧美本精品男人aⅴ天堂| 欧美三级电影在线观看| 免费一级片91| 国产精品丝袜在线| 欧美日韩久久久一区| 中文字幕一区不卡| 欧美日韩美女一区二区| 国产精品理论片在线观看| 色综合色狠狠天天综合色| 亚洲欧美在线另类| 久久综合久久综合久久| 精品理论电影在线| 日韩精品一区二区三区四区视频| 制服丝袜亚洲网站| 日韩精品在线看片z| 日韩欧美国产不卡| 久久女同精品一区二区| 精品理论电影在线观看| 樱桃视频在线观看一区| 亚洲男同性视频| 亚洲美腿欧美偷拍| 亚洲国产日韩av| 欧美a级一区二区| 狠狠色狠狠色合久久伊人| 国产一区啦啦啦在线观看| 国产一本一道久久香蕉| 国产精品一线二线三线| www.久久精品| 欧美亚洲尤物久久| 欧美一区二区在线视频| ww亚洲ww在线观看国产| 日本一区二区三级电影在线观看 | 欧美一级理论片| 欧美成人aa大片| 久久精品一区二区三区av| 国产精品欧美综合在线| 亚洲精品国产品国语在线app| 亚洲一区二区四区蜜桃| 奇米888四色在线精品| 国产真实乱偷精品视频免| 成人动漫精品一区二区| 在线精品视频免费播放| 日韩欧美亚洲一区二区| 国产精品亲子伦对白| 亚洲综合成人在线| 久久国产欧美日韩精品| 成人午夜在线播放| 欧美日韩高清影院| 国产亚洲精品久| 亚洲一区电影777| 国产一区二区在线视频| 欧美日韩小视频| 精品久久免费看| 亚洲一二三区在线观看| 日本欧美在线观看| 国产成人精品亚洲日本在线桃色 | 欧美一级专区免费大片| 欧美成人猛片aaaaaaa| 久久影音资源网| 一区二区三区成人| 国产在线播精品第三| 在线日韩av片| 成人午夜在线视频| 91精品国产高清一区二区三区 | 99在线视频精品| 制服.丝袜.亚洲.另类.中文| 中文字幕二三区不卡| 日韩有码一区二区三区| 成人午夜又粗又硬又大| 69成人精品免费视频| 中文字幕日韩一区| 韩国在线一区二区| 欧美巨大另类极品videosbest | 波多野结衣一区二区三区| 日韩一区二区精品| 亚洲男女一区二区三区| 国产一区在线观看麻豆| 欧美日韩午夜在线视频| 一色屋精品亚洲香蕉网站| 久久aⅴ国产欧美74aaa| 欧美日韩一区二区在线观看视频 | 高清成人免费视频| 日韩欧美一区二区在线视频| 亚洲免费在线观看| 国产大陆亚洲精品国产| 日韩欧美专区在线| 亚洲成人中文在线| 色综合中文字幕| 国产女主播视频一区二区| 蜜桃av一区二区三区电影| 欧美私人免费视频| 亚洲欧美日韩国产综合在线| 国产成人小视频| 精品精品国产高清a毛片牛牛| 椎名由奈av一区二区三区| 国产精品一二三区| 麻豆精品久久久| 国产精品的网站| 色欧美乱欧美15图片| 一区二区三区影院| 欧美酷刑日本凌虐凌虐| 国产成人自拍网| 欧美激情在线观看视频免费| 国产成人亚洲精品青草天美 | 麻豆视频观看网址久久| 一本大道综合伊人精品热热| 宅男在线国产精品| 亚洲国产精品久久不卡毛片 | 亚洲精品精品亚洲| 欧美激情一区在线| 欧美理论电影在线| 91亚洲精品久久久蜜桃网站| 中文字幕视频一区二区三区久| 不卡的看片网站| 亚洲香肠在线观看| 91精品国产一区二区三区蜜臀 | 91精品在线一区二区| 精品电影一区二区| 久久电影网电视剧免费观看| 欧美一区二区三区播放老司机| 亚洲高清在线精品| 欧美日韩精品一区二区三区四区| 水蜜桃久久夜色精品一区的特点| 在线播放视频一区| 日韩精品一卡二卡三卡四卡无卡| 欧美一区二区日韩一区二区| 麻豆精品一区二区三区| 久久久久久久久久久电影| 国产精品69毛片高清亚洲| 日韩一区有码在线| 欧美视频在线观看一区二区| 日韩1区2区3区| 久久久蜜桃精品| 91视频在线观看| 亚洲va国产天堂va久久en| 欧美不卡一区二区三区| 国产精品亚洲专一区二区三区| 国产精品成人午夜| 欧美三级日韩三级| 黄色精品一二区| 中文字幕五月欧美| 91精品国产综合久久蜜臀| 国产一区二区剧情av在线| 亚洲欧美激情在线| 欧美一区在线视频| 国产白丝精品91爽爽久久| 一区二区在线观看免费视频播放| 91精品国产丝袜白色高跟鞋| 国产精品1024久久| 亚洲一区二区黄色| 久久―日本道色综合久久| 99久久99久久久精品齐齐| 男人的j进女人的j一区| 国产精品高潮久久久久无| 91精品国产综合久久香蕉麻豆| 国产69精品久久久久777| 亚洲一区二区影院| 国产女主播视频一区二区| 欧美日韩精品系列| 91精品国产综合久久久久| 国产乱淫av一区二区三区 | 亚洲欧洲av另类| 日韩美一区二区三区| 91在线观看成人| 国产综合色在线视频区| 亚洲一级电影视频| 中文字幕免费不卡| 欧美二区在线观看| 99国产一区二区三精品乱码| 久久国产三级精品| 亚洲成a天堂v人片| 亚洲色图一区二区|