⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 saxparser.c

📁 一个基于SAX分析方法的XML文档解析函数包
💻 C
字号:
#include "SAXParser.h"
#include "NetWork.h" 
#include "StringProcess.h"
#include "XMLwf.h"
#include <stdlib.h>
#include <string.h>
#include <windows.h>

const XML_Char* GetNameFromAttriByIndex(const void* attri, int index)
{	
	return __GetNameFromAttriByIndex(attri, index);
}

const XML_Char* GetValueFromAttriByIndex(const void* attri, int index)
{	
	return __GetValueFromAttriByIndex(attri, index);
}

const XML_Char* GetValueByName(const void* attri, const XML_Char* name)
{
	return __GetValueByName(attri, name);
}
/**
The function asserted bellow is the function to parser a file stream.
*/
typedef void (*XML_DoParse)(FILE* inputStream);
/**
Defining the Parser structure, which would be the main structure in parsing,
*/


SAXParser XML_CreateParser()
{
	PXML_Parser pXML_Parser = NULL;
	pXML_Parser = malloc(sizeof(XML_Parser));
	if(pXML_Parser == NULL) return NULL;

	pXML_Parser->characterDataHandler = 0;
	pXML_Parser->startDocumentHandler = 0;
	pXML_Parser->endDocumentHandler   = 0;
	pXML_Parser->startElementHandler  = 0;
	pXML_Parser->endElementHandler    = 0;
	pXML_Parser->parserErrorHandler   = 0;
	pXML_Parser->doParse              = XML_doParse;
	pXML_Parser->commentHandler       = 0;
	pXML_Parser->instructionHandler   = 0;



	pXML_Parser->userData = NULL;

	return (SAXParser)pXML_Parser;
}

PXML_Parser AsPXML_Parser(Pxml_parser parser)
{
	return (PXML_Parser) parser;
}

void XML_FreeParser(Pxml_parser parser)
{
	free(parser);
}

void XML_SetCharacterDataHandler(Pxml_parser parser, XML_CharacterDataHandler handler)
{
	AsPXML_Parser(parser)->characterDataHandler = handler;
}

void XML_SetStartDocumentHandler(Pxml_parser parser, XML_StartDocumentHandler handler)
{
	AsPXML_Parser(parser)->startDocumentHandler = handler;
}

void XML_SetEndDocumentHandler(Pxml_parser parser, XML_EndDocumentHandler handler)
{
	AsPXML_Parser(parser)->endDocumentHandler = handler;
}

void XML_SetStartElementHandler(Pxml_parser parser, XML_StartElementHandler handler)
{
	AsPXML_Parser(parser)->startElementHandler = handler;
}

void XML_SetEndElementHandler(Pxml_parser parser, XML_EndElementHandler handler)
{
	AsPXML_Parser(parser)->endElementHandler = handler;
}

void XML_SetParserErrorHandler(Pxml_parser parser, XML_ParserErrorHandler handler)
{
	AsPXML_Parser(parser)->parserErrorHandler = handler;
}

void XML_SetCommentHandler(Pxml_parser parser, XML_CommentHandler handler)
{
	AsPXML_Parser(parser)->commentHandler = handler;
}

void XML_SetInstructionHandler(Pxml_parser parser, XML_InstructionHandler handler)
{
	AsPXML_Parser(parser)->instructionHandler = handler;
}

void XML_SetDeclareHandler(Pxml_parser parser, XML_DeclareHandler handler)
{
	AsPXML_Parser(parser)->declareHandler = handler;
}

void XML_SetUserData(Pxml_parser parser, void* p)
{
	AsPXML_Parser(parser)->userData = p;
}

int XMLParser(Pxml_parser parser, void* pPointer, int type)
{
	FILE* in = NULL;
	unsigned int _socket;
	int result;

#ifdef XML_UNICODE
	char* p = malloc(STRLEN((XML_Char*)pPointer)/2 + 1);
#endif

	if(!parser || !pPointer) return 0;

	switch(type){
	case XML_FILE_NAME:
#ifdef XML_UNICODE
		ConvertWCharToPChar((XML_Char*)pPointer, p);
		in = fopen(p, "rb");
//		in = fopen("E:\\Downloads\\DesignTest\\XMLFileBrowser(5-9)\\Debug\\objmgr80.xml", "r");
//		MessageBox(0,p,0,MB_OK);
#else
		in = fopen((char*) pPointer, "rb");
#endif	//fgetc(in);	MessageBox(NULL, "Here", "", MB_OK);
		if(!in){
			if(((PXML_Parser)parser)->parserErrorHandler != NULL)
				((PXML_Parser)parser)->parserErrorHandler( ((PXML_Parser)parser)->userData, "Opening file failed, perhaps because the file does not exist!");	
			return 0;
		}
		break;
	case XML_FILE_STREAM:
		in = (FILE*) pPointer;
		break;
	case XML_URL:
#ifdef XML_UNICODE
		ConvertWCharToPChar((XML_Char*)pPointer, p);
		if(!HttpConnEstablishByUrl(p, &_socket))
#else
		if(!HttpConnEstablishByUrl((char*)pPointer, &_socket))
#endif
		{
			if(((PXML_Parser)parser)->parserErrorHandler != NULL)
				((PXML_Parser)parser)->parserErrorHandler( ((PXML_Parser)parser)->userData, "Getting data from web failed, perhaps because of invalid URL or no serves!");
			return 0;
		} 	
		break;
	default:
		return 0;
	};
	
	initialGlobalVar(_socket, in, type);

	result = AsPXML_Parser(parser)->doParse(parser);

	if(in) fclose(in);

	HttpConnCleanUp();
	return result;
}

void _Test()
{
	test();
}

void XML_Help()
{
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -