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

📄 xmlparse.cpp

📁 C++ class libraries for network-centric, portable applications, integrated perfectly with the C++ St
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    return XML_FALSE;  /* move tagStack to freeTagList */  tStk = tagStack;  while (tStk) {    TAG *tag = tStk;    tStk = tStk->parent;    tag->parent = freeTagList;    moveToFreeBindingList(parser, tag->bindings);    tag->bindings = NULL;    freeTagList = tag;  }  /* move openInternalEntities to freeInternalEntities */  openEntityList = openInternalEntities;  while (openEntityList) {    OPEN_INTERNAL_ENTITY *openEntity = openEntityList;    openEntityList = openEntity->next;    openEntity->next = freeInternalEntities;    freeInternalEntities = openEntity;  }  moveToFreeBindingList(parser, inheritedBindings);  FREE(unknownEncodingMem);  if (unknownEncodingRelease)    unknownEncodingRelease(unknownEncodingData);  poolClear(&tempPool);  poolClear(&temp2Pool);  parserInit(parser, encodingName);  dtdReset(_dtd, &parser->m_mem);  return setContext(parser, implicitContext);}enum XML_Status XMLCALLXML_SetEncoding(XML_Parser parser, const XML_Char *encodingName){  /* Block after XML_Parse()/XML_ParseBuffer() has been called.     XXX There's no way for the caller to determine which of the     XXX possible error cases caused the XML_STATUS_ERROR return.  */  if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED)    return XML_STATUS_ERROR;  if (encodingName == NULL)    protocolEncodingName = NULL;  else {    protocolEncodingName = poolCopyString(&tempPool, encodingName);    if (!protocolEncodingName)      return XML_STATUS_ERROR;  }  return XML_STATUS_OK;}XML_Parser XMLCALLXML_ExternalEntityParserCreate(XML_Parser oldParser,                               const XML_Char *context,                               const XML_Char *encodingName){  XML_Parser parser = oldParser;  DTD *newDtd = NULL;  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_UnparsedEntityDeclHandler oldUnparsedEntityDeclHandler      = unparsedEntityDeclHandler;  XML_NotationDeclHandler oldNotationDeclHandler = notationDeclHandler;  XML_StartNamespaceDeclHandler oldStartNamespaceDeclHandler      = startNamespaceDeclHandler;  XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler      = endNamespaceDeclHandler;  XML_NotStandaloneHandler oldNotStandaloneHandler = notStandaloneHandler;  XML_ExternalEntityRefHandler oldExternalEntityRefHandler      = externalEntityRefHandler;  XML_SkippedEntityHandler oldSkippedEntityHandler = skippedEntityHandler;  XML_UnknownEncodingHandler oldUnknownEncodingHandler      = unknownEncodingHandler;  XML_ElementDeclHandler oldElementDeclHandler = elementDeclHandler;  XML_AttlistDeclHandler oldAttlistDeclHandler = attlistDeclHandler;  XML_EntityDeclHandler oldEntityDeclHandler = entityDeclHandler;  XML_XmlDeclHandler oldXmlDeclHandler = xmlDeclHandler;  ELEMENT_TYPE * oldDeclElementType = declElementType;  void *oldUserData = userData;  void *oldHandlerArg = handlerArg;  XML_Bool oldDefaultExpandInternalEntities = defaultExpandInternalEntities;  XML_Parser oldExternalEntityRefHandlerArg = externalEntityRefHandlerArg;#ifdef XML_DTD  enum XML_ParamEntityParsing oldParamEntityParsing = paramEntityParsing;  int oldInEntityValue = prologState.inEntityValue;#endif  XML_Bool oldns_triplets = ns_triplets;#ifdef XML_DTD  if (!context)    newDtd = oldDtd;#endif /* XML_DTD */  /* Note that the magical uses of the pre-processor to make field     access look more like C++ require that `parser' be overwritten     here.  This makes this function more painful to follow than it     would be otherwise.  */  if (ns) {    XML_Char tmp[2];    *tmp = namespaceSeparator;    parser = parserCreate(encodingName, &parser->m_mem, tmp, newDtd);  }  else {    parser = parserCreate(encodingName, &parser->m_mem, NULL, newDtd);  }  if (!parser)    return NULL;  startElementHandler = oldStartElementHandler;  endElementHandler = oldEndElementHandler;  characterDataHandler = oldCharacterDataHandler;  processingInstructionHandler = oldProcessingInstructionHandler;  commentHandler = oldCommentHandler;  startCdataSectionHandler = oldStartCdataSectionHandler;  endCdataSectionHandler = oldEndCdataSectionHandler;  defaultHandler = oldDefaultHandler;  unparsedEntityDeclHandler = oldUnparsedEntityDeclHandler;  notationDeclHandler = oldNotationDeclHandler;  startNamespaceDeclHandler = oldStartNamespaceDeclHandler;  endNamespaceDeclHandler = oldEndNamespaceDeclHandler;  notStandaloneHandler = oldNotStandaloneHandler;  externalEntityRefHandler = oldExternalEntityRefHandler;  skippedEntityHandler = oldSkippedEntityHandler;  unknownEncodingHandler = oldUnknownEncodingHandler;  elementDeclHandler = oldElementDeclHandler;  attlistDeclHandler = oldAttlistDeclHandler;  entityDeclHandler = oldEntityDeclHandler;  xmlDeclHandler = oldXmlDeclHandler;  declElementType = oldDeclElementType;  userData = oldUserData;  if (oldUserData == oldHandlerArg)    handlerArg = userData;  else    handlerArg = parser;  if (oldExternalEntityRefHandlerArg != oldParser)    externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg;  defaultExpandInternalEntities = oldDefaultExpandInternalEntities;  ns_triplets = oldns_triplets;  parentParser = oldParser;#ifdef XML_DTD  paramEntityParsing = oldParamEntityParsing;  prologState.inEntityValue = oldInEntityValue;  if (context) {#endif /* XML_DTD */    if (!dtdCopy(_dtd, oldDtd, &parser->m_mem)      || !setContext(parser, context)) {      XML_ParserFree(parser);      return NULL;    }    processor = externalEntityInitProcessor;#ifdef XML_DTD  }  else {    /* The DTD instance referenced by _dtd is shared between the document's       root parser and external PE parsers, therefore one does not need to       call setContext. In addition, one also *must* not call setContext,       because this would overwrite existing prefix->binding pointers in       _dtd with ones that get destroyed with the external PE parser.       This would leave those prefixes with dangling pointers.    */    isParamEntity = XML_TRUE;    XmlPrologStateInitExternalEntity(&prologState);    processor = externalParEntInitProcessor;  }#endif /* XML_DTD */  return parser;}static void FASTCALLdestroyBindings(BINDING *bindings, XML_Parser parser){  for (;;) {    BINDING *b = bindings;    if (!b)      break;    bindings = b->nextTagBinding;    FREE(b->uri);    FREE(b);  }}void XMLCALLXML_ParserFree(XML_Parser parser){  TAG *tagList;  OPEN_INTERNAL_ENTITY *entityList;  if (parser == NULL)    return;  /* free tagStack and freeTagList */  tagList = tagStack;  for (;;) {    TAG *p;    if (tagList == NULL) {      if (freeTagList == NULL)        break;      tagList = freeTagList;      freeTagList = NULL;    }    p = tagList;    tagList = tagList->parent;    FREE(p->buf);    destroyBindings(p->bindings, parser);    FREE(p);  }  /* free openInternalEntities and freeInternalEntities */  entityList = openInternalEntities;  for (;;) {    OPEN_INTERNAL_ENTITY *openEntity;    if (entityList == NULL) {      if (freeInternalEntities == NULL)        break;      entityList = freeInternalEntities;      freeInternalEntities = NULL;    }    openEntity = entityList;    entityList = entityList->next;    FREE(openEntity);  }  destroyBindings(freeBindingList, parser);  destroyBindings(inheritedBindings, parser);  poolDestroy(&tempPool);  poolDestroy(&temp2Pool);#ifdef XML_DTD  /* external parameter entity parsers share the DTD structure     parser->m_dtd with the root parser, so we must not destroy it  */  if (!isParamEntity && _dtd)#else  if (_dtd)#endif /* XML_DTD */    dtdDestroy(_dtd, (XML_Bool)!parentParser, &parser->m_mem);  FREE((void *)atts);  FREE(groupConnector);  FREE(buffer);  FREE(dataBuf);  FREE(nsAtts);  FREE(unknownEncodingMem);  if (unknownEncodingRelease)    unknownEncodingRelease(unknownEncodingData);  FREE(parser);}void XMLCALLXML_UseParserAsHandlerArg(XML_Parser parser){  handlerArg = parser;}enum XML_Error XMLCALLXML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD){#ifdef XML_DTD  /* block after XML_Parse()/XML_ParseBuffer() has been called */  if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED)    return XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING;  useForeignDTD = useDTD;  return XML_ERROR_NONE;#else  return XML_ERROR_FEATURE_REQUIRES_XML_DTD;#endif}void XMLCALLXML_SetReturnNSTriplet(XML_Parser parser, int do_nst){  /* block after XML_Parse()/XML_ParseBuffer() has been called */  if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED)    return;  ns_triplets = do_nst ? XML_TRUE : XML_FALSE;}void XMLCALLXML_SetUserData(XML_Parser parser, void *p){  if (handlerArg == userData)    handlerArg = userData = p;  else    userData = p;}enum XML_Status XMLCALLXML_SetBase(XML_Parser parser, const XML_Char *p){  if (p) {    p = poolCopyString(&_dtd->pool, p);    if (!p)      return XML_STATUS_ERROR;    curBase = p;  }  else    curBase = NULL;  return XML_STATUS_OK;}const XML_Char * XMLCALLXML_GetBase(XML_Parser parser){  return curBase;}int XMLCALLXML_GetSpecifiedAttributeCount(XML_Parser parser){  return nSpecifiedAtts;}int XMLCALLXML_GetIdAttributeIndex(XML_Parser parser){  return idAttIndex;}void XMLCALLXML_SetElementHandler(XML_Parser parser,                      XML_StartElementHandler start,                      XML_EndElementHandler end){  startElementHandler = start;  endElementHandler = end;}void XMLCALLXML_SetStartElementHandler(XML_Parser parser,                           XML_StartElementHandler start) {  startElementHandler = start;}void XMLCALLXML_SetEndElementHandler(XML_Parser parser,                         XML_EndElementHandler end) {  endElementHandler = end;}void XMLCALLXML_SetCharacterDataHandler(XML_Parser parser,                            XML_CharacterDataHandler handler){  characterDataHandler = handler;}void XMLCALLXML_SetProcessingInstructionHandler(XML_Parser parser,                                    XML_ProcessingInstructionHandler handler){  processingInstructionHandler = handler;}void XMLCALLXML_SetCommentHandler(XML_Parser parser,                      XML_CommentHandler handler){  commentHandler = handler;}void XMLCALLXML_SetCdataSectionHandler(XML_Parser parser,                           XML_StartCdataSectionHandler start,                           XML_EndCdataSectionHandler end){  startCdataSectionHandler = start;  endCdataSectionHandler = end;}void XMLCALLXML_SetStartCdataSectionHandler(XML_Parser parser,                                XML_StartCdataSectionHandler start) {  startCdataSectionHandler = start;}void XMLCALLXML_SetEndCdataSectionHandler(XML_Parser parser,                              XML_EndCdataSectionHandler end) {  endCdataSectionHandler = end;}void XMLCALLXML_SetDefaultHandler(XML_Parser parser,                      XML_DefaultHandler handler){  defaultHandler = handler;  defaultExpandInternalEntities = XML_FALSE;}void XMLCALLXML_SetDefaultHandlerExpand(XML_Parser parser,                            XML_DefaultHandler handler){  defaultHandler = handler;  defaultExpandInternalEntities = XML_TRUE;}void XMLCALLXML_SetDoctypeDeclHandler(XML_Parser parser,                          XML_StartDoctypeDeclHandler start,                          XML_EndDoctypeDeclHandler end){  startDoctypeDeclHandler = start;  endDoctypeDeclHandler = end;}void XMLCALLXML_SetStartDoctypeDeclHandler(XML_Parser parser,                               XML_StartDoctypeDeclHandler start) {  startDoctypeDeclHandler = start;}void XMLCALLXML_SetEndDoctypeDeclHandler(XML_Parser parser,                             XML_EndDoctypeDeclHandler end) {  endDoctypeDeclHandler = end;}void XMLCALLXML_SetUnparsedEntityDeclHandler(XML_Parser parser,                                 XML_UnparsedEntityDeclHandler handler){  unparsedEntityDeclHandler = handler;}void XMLCALLXML_SetNotationDeclHandler(XML_Parser parser,                           XML_NotationDeclHandler handler){  notationDeclHandler = handler;}void XMLCALLXML_SetNamespaceDeclHandler(XML_Parser parser,                            XML_StartNamespaceDeclHandler start,

⌨️ 快捷键说明

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