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

📄 xmlparse.c

📁 AnyQ服务端源代码(2004/10/28)源码
💻 C
📖 第 1 页 / 共 5 页
字号:
#define declElementType (((Parser *)parser)->m_declElementType)#define declAttributeId (((Parser *)parser)->m_declAttributeId)#define declAttributeIsCdata (((Parser *)parser)->m_declAttributeIsCdata)#define freeTagList (((Parser *)parser)->m_freeTagList)#define freeBindingList (((Parser *)parser)->m_freeBindingList)#define inheritedBindings (((Parser *)parser)->m_inheritedBindings)#define tagStack (((Parser *)parser)->m_tagStack)#define atts (((Parser *)parser)->m_atts)#define attsSize (((Parser *)parser)->m_attsSize)#define nSpecifiedAtts (((Parser *)parser)->m_nSpecifiedAtts)#define tempPool (((Parser *)parser)->m_tempPool)#define temp2Pool (((Parser *)parser)->m_temp2Pool)#define groupConnector (((Parser *)parser)->m_groupConnector)#define groupSize (((Parser *)parser)->m_groupSize)#define hadExternalDoctype (((Parser *)parser)->m_hadExternalDoctype)#define namespaceSeparator (((Parser *)parser)->m_namespaceSeparator)#ifdef _MSC_VER#ifdef _DEBUGParser *asParser(XML_Parser parser){    return parser;}#endif#endifXML_Parser XML_ParserCreate(const XML_Char *encodingName){    XML_Parser parser = malloc(sizeof(Parser));    if (!parser)        return parser;    processor = prologInitProcessor;    XmlPrologStateInit(&prologState);    userData = 0;    handlerArg = 0;    startElementHandler = 0;    endElementHandler = 0;    characterDataHandler = 0;    processingInstructionHandler = 0;    commentHandler = 0;    startCdataSectionHandler = 0;    endCdataSectionHandler = 0;    defaultHandler = 0;    unparsedEntityDeclHandler = 0;    notationDeclHandler = 0;    startNamespaceDeclHandler = 0;    endNamespaceDeclHandler = 0;    notStandaloneHandler = 0;    externalEntityRefHandler = 0;    externalEntityRefHandlerArg = parser;    unknownEncodingHandler = 0;    buffer = 0;    bufferPtr = 0;    bufferEnd = 0;    parseEndByteIndex = 0;    parseEndPtr = 0;    bufferLim = 0;    declElementType = 0;    declAttributeId = 0;    declEntity = 0;    declNotationName = 0;    declNotationPublicId = 0;    memset(&position, 0, sizeof(POSITION));    errorCode = XML_ERROR_NONE;    eventPtr = 0;    eventEndPtr = 0;    positionPtr = 0;    openInternalEntities = 0;    tagLevel = 0;    tagStack = 0;    freeTagList = 0;    freeBindingList = 0;    inheritedBindings = 0;    attsSize = INIT_ATTS_SIZE;    atts = malloc(attsSize * sizeof(ATTRIBUTE));    nSpecifiedAtts = 0;    dataBuf = malloc(INIT_DATA_BUF_SIZE * sizeof(XML_Char));    groupSize = 0;    groupConnector = 0;    hadExternalDoctype = 0;    unknownEncodingMem = 0;    unknownEncodingRelease = 0;    unknownEncodingData = 0;    unknownEncodingHandlerData = 0;    namespaceSeparator = '!';    ns = 0;    poolInit(&tempPool);    poolInit(&temp2Pool);    protocolEncodingName = encodingName ? poolCopyString(&tempPool, encodingName) : 0;    if (!dtdInit(&dtd) || !atts || !dataBuf            || (encodingName && !protocolEncodingName)) {        XML_ParserFree(parser);        return 0;    }    dataBufEnd = dataBuf + INIT_DATA_BUF_SIZE;    XmlInitEncoding(&initEncoding, &encoding, 0);    return parser;}XML_Parser XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep){    static    const XML_Char implicitContext[] = {        XML_T('x'), XML_T('m'), XML_T('l'), XML_T('='),        XML_T('h'), XML_T('t'), XML_T('t'), XML_T('p'), XML_T(':'),        XML_T('/'), XML_T('/'), XML_T('w'), XML_T('w'), XML_T('w'),        XML_T('.'), XML_T('w'), XML_T('3'),        XML_T('.'), XML_T('o'), XML_T('r'), XML_T('g'),        XML_T('/'), XML_T('X'), XML_T('M'), XML_T('L'),        XML_T('/'), XML_T('1'), XML_T('9'), XML_T('9'), XML_T('8'),        XML_T('/'), XML_T('n'), XML_T('a'), XML_T('m'), XML_T('e'),        XML_T('s'), XML_T('p'), XML_T('a'), XML_T('c'), XML_T('e'),        XML_T('\0')    };    XML_Parser parser = XML_ParserCreate(encodingName);    if (parser) {        XmlInitEncodingNS(&initEncoding, &encoding, 0);        ns = 1;        namespaceSeparator = nsSep;    }    if (!setContext(parser, implicitContext)) {        XML_ParserFree(parser);        return 0;    }    return parser;}int XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName){    if (!encodingName)        protocolEncodingName = 0;    else {        protocolEncodingName = poolCopyString(&tempPool, encodingName);        if (!protocolEncodingName)            return 0;    }    return 1;}XML_Parser XML_ExternalEntityParserCreate(XML_Parser oldParser,        const XML_Char *context,        const XML_Char *encodingName){    XML_Parser parser = oldParser;    DTD *oldDtd = &dtd;    XML_StartElementHandler oldStartElementHandler = startElementHandler;    XML_EndElementHandler oldEndElementHandler = endElementHandler;    XML_CharacterDataHandler oldCharacterDataHandler = characterDataHandler;    XML_ProcessingInstructionHandler oldProcessingInstructionHandler = processingInstructionHandler;    XML_CommentHandler oldCommentHandler = commentHandler;    XML_StartCdataSectionHandler oldStartCdataSectionHandler = startCdataSectionHandler;    XML_EndCdataSectionHandler oldEndCdataSectionHandler = endCdataSectionHandler;    XML_DefaultHandler oldDefaultHandler = defaultHandler;    XML_StartNamespaceDeclHandler oldStartNamespaceDeclHandler = startNamespaceDeclHandler;    XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler = endNamespaceDeclHandler;    XML_NotStandaloneHandler oldNotStandaloneHandler = notStandaloneHandler;    XML_ExternalEntityRefHandler oldExternalEntityRefHandler = externalEntityRefHandler;    XML_UnknownEncodingHandler oldUnknownEncodingHandler = unknownEncodingHandler;    void *oldUserData = userData;    void *oldHandlerArg = handlerArg;    int oldDefaultExpandInternalEntities = defaultExpandInternalEntities;    void *oldExternalEntityRefHandlerArg = externalEntityRefHandlerArg;    parser = (ns              ? XML_ParserCreateNS(encodingName, namespaceSeparator)              : XML_ParserCreate(encodingName));    if (!parser)        return 0;    startElementHandler = oldStartElementHandler;    endElementHandler = oldEndElementHandler;    characterDataHandler = oldCharacterDataHandler;    processingInstructionHandler = oldProcessingInstructionHandler;    commentHandler = oldCommentHandler;    startCdataSectionHandler = oldStartCdataSectionHandler;    endCdataSectionHandler = oldEndCdataSectionHandler;    defaultHandler = oldDefaultHandler;    startNamespaceDeclHandler = oldStartNamespaceDeclHandler;    endNamespaceDeclHandler = oldEndNamespaceDeclHandler;    notStandaloneHandler = oldNotStandaloneHandler;    externalEntityRefHandler = oldExternalEntityRefHandler;    unknownEncodingHandler = oldUnknownEncodingHandler;    userData = oldUserData;    if (oldUserData == oldHandlerArg)        handlerArg = userData;    else        handlerArg = parser;    if (oldExternalEntityRefHandlerArg != oldParser)        externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg;    defaultExpandInternalEntities = oldDefaultExpandInternalEntities;    if (!dtdCopy(&dtd, oldDtd) || !setContext(parser, context)) {        XML_ParserFree(parser);        return 0;    }    processor = externalEntityInitProcessor;    return parser;}staticvoid destroyBindings(BINDING *bindings){    for (;;) {        BINDING *b = bindings;        if (!b)            break;        bindings = b->nextTagBinding;        free(b->uri);        free(b);    }}void XML_ParserFree(XML_Parser parser){    for (;;) {        TAG *p;        if (tagStack == 0) {            if (freeTagList == 0)                break;            tagStack = freeTagList;            freeTagList = 0;        }        p = tagStack;        tagStack = tagStack->parent;        free(p->buf);        destroyBindings(p->bindings);        free(p);    }    destroyBindings(freeBindingList);    destroyBindings(inheritedBindings);    poolDestroy(&tempPool);    poolDestroy(&temp2Pool);    dtdDestroy(&dtd);    free((void *)atts);    free(groupConnector);    free(buffer);    free(dataBuf);    free(unknownEncodingMem);    if (unknownEncodingRelease)        unknownEncodingRelease(unknownEncodingData);    free(parser);}void XML_UseParserAsHandlerArg(XML_Parser parser){    handlerArg = parser;}void XML_SetUserData(XML_Parser parser, void *p){    if (handlerArg == userData)        handlerArg = userData = p;    else        userData = p;}int XML_SetBase(XML_Parser parser, const XML_Char *p){    if (p) {        p = poolCopyString(&dtd.pool, p);        if (!p)            return 0;        dtd.base = p;    }    else        dtd.base = 0;    return 1;}const XML_Char *XML_GetBase(XML_Parser parser){    return dtd.base;}int XML_GetSpecifiedAttributeCount(XML_Parser parser){    return nSpecifiedAtts;}void XML_SetElementHandler(XML_Parser parser,                           XML_StartElementHandler start,                           XML_EndElementHandler end){    startElementHandler = start;    endElementHandler = end;}void XML_SetCharacterDataHandler(XML_Parser parser,                                 XML_CharacterDataHandler handler){    characterDataHandler = handler;}void XML_SetProcessingInstructionHandler(XML_Parser parser,        XML_ProcessingInstructionHandler handler){    processingInstructionHandler = handler;}void XML_SetCommentHandler(XML_Parser parser,                           XML_CommentHandler handler){    commentHandler = handler;}void XML_SetCdataSectionHandler(XML_Parser parser,                                XML_StartCdataSectionHandler start,                                XML_EndCdataSectionHandler end){    startCdataSectionHandler = start;    endCdataSectionHandler = end;}void XML_SetDefaultHandler(XML_Parser parser,                           XML_DefaultHandler handler){    defaultHandler = handler;    defaultExpandInternalEntities = 0;}void XML_SetDefaultHandlerExpand(XML_Parser parser,                                 XML_DefaultHandler handler){    defaultHandler = handler;    defaultExpandInternalEntities = 1;}void XML_SetUnparsedEntityDeclHandler(XML_Parser parser,                                      XML_UnparsedEntityDeclHandler handler){    unparsedEntityDeclHandler = handler;}void XML_SetNotationDeclHandler(XML_Parser parser,                                XML_NotationDeclHandler handler){    notationDeclHandler = handler;}void XML_SetNamespaceDeclHandler(XML_Parser parser,                                 XML_StartNamespaceDeclHandler start,                                 XML_EndNamespaceDeclHandler end){    startNamespaceDeclHandler = start;    endNamespaceDeclHandler = end;}void XML_SetNotStandaloneHandler(XML_Parser parser,                                 XML_NotStandaloneHandler handler){    notStandaloneHandler = handler;}void XML_SetExternalEntityRefHandler(XML_Parser parser,                                     XML_ExternalEntityRefHandler handler){    externalEntityRefHandler = handler;}void XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg){    if (arg)        externalEntityRefHandlerArg = arg;    else        externalEntityRefHandlerArg = parser;}void XML_SetUnknownEncodingHandler(XML_Parser parser,                                   XML_UnknownEncodingHandler handler,                                   void *data){    unknownEncodingHandler = handler;    unknownEncodingHandlerData = data;

⌨️ 快捷键说明

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