📄 xmlparse.c
字号:
int XML_GetIdAttributeIndex(XML_Parser parser){ return idAttIndex;}void XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end){ startElementHandler = start; endElementHandler = end;}void XML_SetStartElementHandler(XML_Parser parser, XML_StartElementHandler start) { startElementHandler = start;}void XML_SetEndElementHandler(XML_Parser parser, XML_EndElementHandler end) { 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_SetStartCdataSectionHandler(XML_Parser parser, XML_StartCdataSectionHandler start) { startCdataSectionHandler = start;}void XML_SetEndCdataSectionHandler(XML_Parser parser, XML_EndCdataSectionHandler end) { 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_SetDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start, XML_EndDoctypeDeclHandler end){ startDoctypeDeclHandler = start; endDoctypeDeclHandler = end;}void XML_SetStartDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start) { startDoctypeDeclHandler = start;}void XML_SetEndDoctypeDeclHandler(XML_Parser parser, XML_EndDoctypeDeclHandler end) { endDoctypeDeclHandler = end;}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_SetStartNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start) { startNamespaceDeclHandler = start;}void XML_SetEndNamespaceDeclHandler(XML_Parser parser, XML_EndNamespaceDeclHandler end) { 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;}void XML_SetElementDeclHandler(XML_Parser parser, XML_ElementDeclHandler eldecl){ elementDeclHandler = eldecl;}void XML_SetAttlistDeclHandler(XML_Parser parser, XML_AttlistDeclHandler attdecl){ attlistDeclHandler = attdecl;}void XML_SetEntityDeclHandler(XML_Parser parser, XML_EntityDeclHandler handler){ entityDeclHandler = handler;}void XML_SetXmlDeclHandler(XML_Parser parser, XML_XmlDeclHandler handler) { xmlDeclHandler = handler;}int XML_SetParamEntityParsing(XML_Parser parser, enum XML_ParamEntityParsing parsing){#ifdef XML_DTD paramEntityParsing = parsing; return 1;#else return parsing == XML_PARAM_ENTITY_PARSING_NEVER;#endif}int XML_Parse(XML_Parser parser, const char *s, int len, int isFinal){ if (len == 0) { if (!isFinal) return 1; positionPtr = bufferPtr; errorCode = processor(parser, bufferPtr, parseEndPtr = bufferEnd, 0); if (errorCode == XML_ERROR_NONE) return 1; eventEndPtr = eventPtr; processor = errorProcessor; return 0; }#ifndef XML_CONTEXT_BYTES else if (bufferPtr == bufferEnd) { const char *end; int nLeftOver; parseEndByteIndex += len; positionPtr = s; if (isFinal) { errorCode = processor(parser, s, parseEndPtr = s + len, 0); if (errorCode == XML_ERROR_NONE) return 1; eventEndPtr = eventPtr; processor = errorProcessor; return 0; } errorCode = processor(parser, s, parseEndPtr = s + len, &end); if (errorCode != XML_ERROR_NONE) { eventEndPtr = eventPtr; processor = errorProcessor; return 0; } XmlUpdatePosition(encoding, positionPtr, end, &position); nLeftOver = s + len - end; if (nLeftOver) { if (buffer == 0 || nLeftOver > bufferLim - buffer) { /* FIXME avoid integer overflow */ buffer = buffer == 0 ? MALLOC(len * 2) : REALLOC(buffer, len * 2); /* FIXME storage leak if realloc fails */ if (!buffer) { errorCode = XML_ERROR_NO_MEMORY; eventPtr = eventEndPtr = 0; processor = errorProcessor; return 0; } bufferLim = buffer + len * 2; } memcpy(buffer, end, nLeftOver); bufferPtr = buffer; bufferEnd = buffer + nLeftOver; } return 1; }#endif /* not defined XML_CONTEXT_BYTES */ else { memcpy(XML_GetBuffer(parser, len), s, len); return XML_ParseBuffer(parser, len, isFinal); }}int XML_ParseBuffer(XML_Parser parser, int len, int isFinal){ const char *start = bufferPtr; positionPtr = start; bufferEnd += len; parseEndByteIndex += len; errorCode = processor(parser, start, parseEndPtr = bufferEnd, isFinal ? (const char **)0 : &bufferPtr); if (errorCode == XML_ERROR_NONE) { if (!isFinal) XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position); return 1; } else { eventEndPtr = eventPtr; processor = errorProcessor; return 0; }}void *XML_GetBuffer(XML_Parser parser, int len){ if (len > bufferLim - bufferEnd) { /* FIXME avoid integer overflow */ int neededSize = len + (bufferEnd - bufferPtr);#ifdef XML_CONTEXT_BYTES int keep = bufferPtr - buffer; if (keep > XML_CONTEXT_BYTES) keep = XML_CONTEXT_BYTES; neededSize += keep;#endif /* defined XML_CONTEXT_BYTES */ if (neededSize <= bufferLim - buffer) {#ifdef XML_CONTEXT_BYTES if (keep < bufferPtr - buffer) { int offset = (bufferPtr - buffer) - keep; memmove(buffer, &buffer[offset], bufferEnd - bufferPtr + keep); bufferEnd -= offset; bufferPtr -= offset; }#else memmove(buffer, bufferPtr, bufferEnd - bufferPtr); bufferEnd = buffer + (bufferEnd - bufferPtr); bufferPtr = buffer;#endif /* not defined XML_CONTEXT_BYTES */ } else { char *newBuf; int bufferSize = bufferLim - bufferPtr; if (bufferSize == 0) bufferSize = INIT_BUFFER_SIZE; do { bufferSize *= 2; } while (bufferSize < neededSize); newBuf = MALLOC(bufferSize); if (newBuf == 0) { errorCode = XML_ERROR_NO_MEMORY; return 0; } bufferLim = newBuf + bufferSize;#ifdef XML_CONTEXT_BYTES if (bufferPtr) { int keep = bufferPtr - buffer; if (keep > XML_CONTEXT_BYTES) keep = XML_CONTEXT_BYTES; memcpy(newBuf, &bufferPtr[-keep], bufferEnd - bufferPtr + keep); FREE(buffer); buffer = newBuf; bufferEnd = buffer + (bufferEnd - bufferPtr) + keep; bufferPtr = buffer + keep; } else { bufferEnd = newBuf + (bufferEnd - bufferPtr); bufferPtr = buffer = newBuf; }#else if (bufferPtr) { memcpy(newBuf, bufferPtr, bufferEnd - bufferPtr); FREE(buffer); } bufferEnd = newBuf + (bufferEnd - bufferPtr); bufferPtr = buffer = newBuf;#endif /* not defined XML_CONTEXT_BYTES */ } } return bufferEnd;}enum XML_Error XML_GetErrorCode(XML_Parser parser){ return errorCode;}long XML_GetCurrentByteIndex(XML_Parser parser){ if (eventPtr) return parseEndByteIndex - (parseEndPtr - eventPtr); return -1;}int XML_GetCurrentByteCount(XML_Parser parser){ if (eventEndPtr && eventPtr) return eventEndPtr - eventPtr; return 0;}const char * XML_GetInputContext(XML_Parser parser, int *offset, int *size){#ifdef XML_CONTEXT_BYTES if (eventPtr && buffer) { *offset = eventPtr - buffer; *size = bufferEnd - buffer; return buffer; }#endif /* defined XML_CONTEXT_BYTES */ return (char *) 0;}int XML_GetCurrentLineNumber(XML_Parser parser){ if (eventPtr) { XmlUpdatePosition(encoding, positionPtr, eventPtr, &position); positionPtr = eventPtr; } return position.lineNumber + 1;}int XML_GetCurrentColumnNumber(XML_Parser parser){ if (eventPtr) { XmlUpdatePosition(encoding, positionPtr, eventPtr, &position); positionPtr = eventPtr; } return position.columnNumber;}void XML_DefaultCurrent(XML_Parser parser){ if (defaultHandler) { if (openInternalEntities) reportDefault(parser, internalEncoding, openInternalEntities->internalEventPtr, openInternalEntities->internalEventEndPtr); else reportDefault(parser, encoding, eventPtr, eventEndPtr); }}const XML_LChar *XML_ErrorString(int code){ static const XML_LChar *message[] = { 0, XML_T("out of memory"), XML_T("syntax error"), XML_T("no element found"), XML_T("not well-formed (invalid token)"), XML_T("unclosed token"), XML_T("unclosed token"), XML_T("mismatched tag"), XML_T("duplicate attribute"), XML_T("junk after document element"), XML_T("illegal parameter entity reference"), XML_T("undefined entity"), XML_T("recursive entity reference"), XML_T("asynchronous entity"), XML_T("reference to invalid character number"), XML_T("reference to binary entity"), XML_T("reference to external entity in attribute"), XML_T("xml processing instruction not at start of external entity"), XML_T("unknown encoding"), XML_T("encoding specified in XML declaration is incorrect"), XML_T("unclosed CDATA section"), XML_T("error in processing external entity reference"), XML_T("document is not standalone"), XML_T("unexpected parser state - please send a bug report") }; if (code > 0 && code < sizeof(message)/sizeof(message[0])) return message[code]; return 0;}const XML_LChar *XML_ExpatVersion(void) { return VERSION;}XML_Expat_VersionXML_ExpatVersionInfo(void) { XML_Expat_Version version; version.major = XML_MAJOR_VERSION; version.minor = XML_MINOR_VERSION; version.micro = XML_MICRO_VERSION; return version;}staticenum XML_Error contentProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -