?? saxparser.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 + -