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

📄 xmlparse.cpp

📁 C++ class libraries for network-centric, portable applications, integrated perfectly with the C++ St
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                            XML_EndNamespaceDeclHandler end){  startNamespaceDeclHandler = start;  endNamespaceDeclHandler = end;}void XMLCALLXML_SetStartNamespaceDeclHandler(XML_Parser parser,                                 XML_StartNamespaceDeclHandler start) {  startNamespaceDeclHandler = start;}void XMLCALLXML_SetEndNamespaceDeclHandler(XML_Parser parser,                               XML_EndNamespaceDeclHandler end) {  endNamespaceDeclHandler = end;}void XMLCALLXML_SetNotStandaloneHandler(XML_Parser parser,                            XML_NotStandaloneHandler handler){  notStandaloneHandler = handler;}void XMLCALLXML_SetExternalEntityRefHandler(XML_Parser parser,                                XML_ExternalEntityRefHandler handler){  externalEntityRefHandler = handler;}void XMLCALLXML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg){  if (arg)    externalEntityRefHandlerArg = (XML_Parser)arg;  else    externalEntityRefHandlerArg = parser;}void XMLCALLXML_SetSkippedEntityHandler(XML_Parser parser,                            XML_SkippedEntityHandler handler){  skippedEntityHandler = handler;}void XMLCALLXML_SetUnknownEncodingHandler(XML_Parser parser,                              XML_UnknownEncodingHandler handler,                              void *data){  unknownEncodingHandler = handler;  unknownEncodingHandlerData = data;}void XMLCALLXML_SetElementDeclHandler(XML_Parser parser,                          XML_ElementDeclHandler eldecl){  elementDeclHandler = eldecl;}void XMLCALLXML_SetAttlistDeclHandler(XML_Parser parser,                          XML_AttlistDeclHandler attdecl){  attlistDeclHandler = attdecl;}void XMLCALLXML_SetEntityDeclHandler(XML_Parser parser,                         XML_EntityDeclHandler handler){  entityDeclHandler = handler;}void XMLCALLXML_SetXmlDeclHandler(XML_Parser parser,                      XML_XmlDeclHandler handler) {  xmlDeclHandler = handler;}int XMLCALLXML_SetParamEntityParsing(XML_Parser parser,                          enum XML_ParamEntityParsing peParsing){  /* block after XML_Parse()/XML_ParseBuffer() has been called */  if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED)    return 0;#ifdef XML_DTD  paramEntityParsing = peParsing;  return 1;#else  return peParsing == XML_PARAM_ENTITY_PARSING_NEVER;#endif}enum XML_Status XMLCALLXML_Parse(XML_Parser parser, const char *s, int len, int isFinal){  switch (ps_parsing) {  case XML_SUSPENDED:    errorCode = XML_ERROR_SUSPENDED;    return XML_STATUS_ERROR;  case XML_FINISHED:    errorCode = XML_ERROR_FINISHED;    return XML_STATUS_ERROR;  default:    ps_parsing = XML_PARSING;  }  if (len == 0) {    ps_finalBuffer = (XML_Bool)isFinal;    if (!isFinal)      return XML_STATUS_OK;    positionPtr = bufferPtr;    parseEndPtr = bufferEnd;    /* If data are left over from last buffer, and we now know that these       data are the final chunk of input, then we have to check them again       to detect errors based on that fact.    */    errorCode = processor(parser, bufferPtr, parseEndPtr, &bufferPtr);    if (errorCode == XML_ERROR_NONE) {      switch (ps_parsing) {      case XML_SUSPENDED:        XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position);        positionPtr = bufferPtr;        return XML_STATUS_SUSPENDED;      case XML_INITIALIZED:       case XML_PARSING:        ps_parsing = XML_FINISHED;        /* fall through */      default:        return XML_STATUS_OK;      }    }    eventEndPtr = eventPtr;    processor = errorProcessor;    return XML_STATUS_ERROR;  }#ifndef XML_CONTEXT_BYTES  else if (bufferPtr == bufferEnd) {    const char *end;    int nLeftOver;    enum XML_Error result;    parseEndByteIndex += len;    positionPtr = s;    ps_finalBuffer = (XML_Bool)isFinal;    errorCode = processor(parser, s, parseEndPtr = s + len, &end);    if (errorCode != XML_ERROR_NONE) {      eventEndPtr = eventPtr;      processor = errorProcessor;      return XML_STATUS_ERROR;    }    else {      switch (ps_parsing) {      case XML_SUSPENDED:        result = XML_STATUS_SUSPENDED;        break;      case XML_INITIALIZED:      case XML_PARSING:        result = XML_STATUS_OK;        if (isFinal) {          ps_parsing = XML_FINISHED;          return result;        }      }    }    XmlUpdatePosition(encoding, positionPtr, end, &position);    nLeftOver = s + len - end;    if (nLeftOver) {      if (buffer == NULL || nLeftOver > bufferLim - buffer) {        /* FIXME avoid integer overflow */        char *temp;        temp = (buffer == NULL                ? (char *)MALLOC(len * 2)                : (char *)REALLOC(buffer, len * 2));        if (temp == NULL) {          errorCode = XML_ERROR_NO_MEMORY;          return XML_STATUS_ERROR;        }        buffer = temp;        if (!buffer) {          errorCode = XML_ERROR_NO_MEMORY;          eventPtr = eventEndPtr = NULL;          processor = errorProcessor;          return XML_STATUS_ERROR;        }        bufferLim = buffer + len * 2;      }      memcpy(buffer, end, nLeftOver);    }    bufferPtr = buffer;    bufferEnd = buffer + nLeftOver;    positionPtr = bufferPtr;    parseEndPtr = bufferEnd;    eventPtr = bufferPtr;    eventEndPtr = bufferPtr;    return result;  }#endif  /* not defined XML_CONTEXT_BYTES */  else {    void *buff = XML_GetBuffer(parser, len);    if (buff == NULL)      return XML_STATUS_ERROR;    else {      memcpy(buff, s, len);      return XML_ParseBuffer(parser, len, isFinal);    }  }}enum XML_Status XMLCALLXML_ParseBuffer(XML_Parser parser, int len, int isFinal){  const char *start;  enum XML_Status result = XML_STATUS_OK;  switch (ps_parsing) {  case XML_SUSPENDED:    errorCode = XML_ERROR_SUSPENDED;    return XML_STATUS_ERROR;  case XML_FINISHED:    errorCode = XML_ERROR_FINISHED;    return XML_STATUS_ERROR;  default:    ps_parsing = XML_PARSING;  }  start = bufferPtr;  positionPtr = start;  bufferEnd += len;  parseEndPtr = bufferEnd;  parseEndByteIndex += len;  ps_finalBuffer = (XML_Bool)isFinal;  errorCode = processor(parser, start, parseEndPtr, &bufferPtr);  if (errorCode != XML_ERROR_NONE) {    eventEndPtr = eventPtr;    processor = errorProcessor;    return XML_STATUS_ERROR;  }  else {    switch (ps_parsing) {    case XML_SUSPENDED:      result = XML_STATUS_SUSPENDED;      break;    case XML_INITIALIZED:     case XML_PARSING:      if (isFinal) {        ps_parsing = XML_FINISHED;        return result;      }    default: ;  /* should not happen */    }  }  XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position);  positionPtr = bufferPtr;  return result;}void * XMLCALLXML_GetBuffer(XML_Parser parser, int len){  switch (ps_parsing) {  case XML_SUSPENDED:    errorCode = XML_ERROR_SUSPENDED;    return NULL;  case XML_FINISHED:    errorCode = XML_ERROR_FINISHED;    return NULL;  default: ;  }  if (len > bufferLim - bufferEnd) {    /* FIXME avoid integer overflow */    int neededSize = len + (int)(bufferEnd - bufferPtr);#ifdef XML_CONTEXT_BYTES    int keep = (int)(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 = (int)(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 = (int)(bufferLim - bufferPtr);      if (bufferSize == 0)        bufferSize = INIT_BUFFER_SIZE;      do {        bufferSize *= 2;      } while (bufferSize < neededSize);      newBuf = (char *)MALLOC(bufferSize);      if (newBuf == 0) {        errorCode = XML_ERROR_NO_MEMORY;        return NULL;      }      bufferLim = newBuf + bufferSize;#ifdef XML_CONTEXT_BYTES      if (bufferPtr) {        int keep = (int)(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_Status XMLCALLXML_StopParser(XML_Parser parser, XML_Bool resumable){  switch (ps_parsing) {  case XML_SUSPENDED:    if (resumable) {      errorCode = XML_ERROR_SUSPENDED;      return XML_STATUS_ERROR;    }    ps_parsing = XML_FINISHED;    break;  case XML_FINISHED:    errorCode = XML_ERROR_FINISHED;    return XML_STATUS_ERROR;  default:    if (resumable) {#ifdef XML_DTD      if (isParamEntity) {        errorCode = XML_ERROR_SUSPEND_PE;        return XML_STATUS_ERROR;      }#endif      ps_parsing = XML_SUSPENDED;    }    else      ps_parsing = XML_FINISHED;  }  return XML_STATUS_OK;}enum XML_Status XMLCALLXML_ResumeParser(XML_Parser parser){  enum XML_Status result = XML_STATUS_OK;  if (ps_parsing != XML_SUSPENDED) {    errorCode = XML_ERROR_NOT_SUSPENDED;    return XML_STATUS_ERROR;  }  ps_parsing = XML_PARSING;  errorCode = processor(parser, bufferPtr, parseEndPtr, &bufferPtr);  if (errorCode != XML_ERROR_NONE) {    eventEndPtr = eventPtr;    processor = errorProcessor;    return XML_STATUS_ERROR;  }  else {    switch (ps_parsing) {    case XML_SUSPENDED:      result = XML_STATUS_SUSPENDED;      break;    case XML_INITIALIZED:     case XML_PARSING:      if (ps_finalBuffer) {        ps_parsing = XML_FINISHED;        return result;      }    default: ;    }  }  XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position);  positionPtr = bufferPtr;  return result;}void XMLCALLXML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status){  assert(status != NULL);  *status = parser->m_parsingStatus;}enum XML_Error XMLCALLXML_GetErrorCode(XML_Parser parser){  return errorCode;}XML_Index XMLCALLXML_GetCurrentByteIndex(XML_Parser parser){  if (eventPtr)    return parseEndByteIndex - (parseEndPtr - eventPtr);  return -1;}int XMLCALLXML_GetCurrentByteCount(XML_Parser parser){

⌨️ 快捷键说明

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