zoukankan      html  css  js  c++  java
  • part of xml parser

    typedef struct XML_ParserStruct *XML_Parser;

    struct XML_ParserStruct {
      /* The first member must be userData so that the XML_GetUserData
         macro works. */
      void *m_userData;
      void *m_handlerArg;
      char *m_buffer;
      const XML_Memory_Handling_Suite m_mem;
      /* first character to be parsed */
      const char *m_bufferPtr;
      /* past last character to be parsed */
      char *m_bufferEnd;
      /* allocated end of buffer */
      const char *m_bufferLim;
      XML_Index m_parseEndByteIndex;
      const char *m_parseEndPtr;
      XML_Char *m_dataBuf;
      XML_Char *m_dataBufEnd;
      XML_StartElementHandler m_startElementHandler;
      XML_EndElementHandler m_endElementHandler;
      XML_CharacterDataHandler m_characterDataHandler;
      XML_ProcessingInstructionHandler m_processingInstructionHandler;
      XML_CommentHandler m_commentHandler;
      XML_StartCdataSectionHandler m_startCdataSectionHandler;
      XML_EndCdataSectionHandler m_endCdataSectionHandler;
      XML_DefaultHandler m_defaultHandler;
      XML_StartDoctypeDeclHandler m_startDoctypeDeclHandler;
      XML_EndDoctypeDeclHandler m_endDoctypeDeclHandler;
      XML_UnparsedEntityDeclHandler m_unparsedEntityDeclHandler;
      XML_NotationDeclHandler m_notationDeclHandler;
      XML_StartNamespaceDeclHandler m_startNamespaceDeclHandler;
      XML_EndNamespaceDeclHandler m_endNamespaceDeclHandler;
      XML_NotStandaloneHandler m_notStandaloneHandler;
      XML_ExternalEntityRefHandler m_externalEntityRefHandler;
      XML_Parser m_externalEntityRefHandlerArg;
      XML_SkippedEntityHandler m_skippedEntityHandler;
      XML_UnknownEncodingHandler m_unknownEncodingHandler;
      XML_ElementDeclHandler m_elementDeclHandler;
      XML_AttlistDeclHandler m_attlistDeclHandler;
      XML_EntityDeclHandler m_entityDeclHandler;
      XML_XmlDeclHandler m_xmlDeclHandler;
      const ENCODING *m_encoding;
      INIT_ENCODING m_initEncoding;
      const ENCODING *m_internalEncoding;
      const XML_Char *m_protocolEncodingName;
      XML_Bool m_ns;
      XML_Bool m_ns_triplets;
      void *m_unknownEncodingMem;
      void *m_unknownEncodingData;
      void *m_unknownEncodingHandlerData;
      void (XMLCALL *m_unknownEncodingRelease)(void *);
      PROLOG_STATE m_prologState;
      Processor *m_processor;
      enum XML_Error m_errorCode;
      const char *m_eventPtr;
      const char *m_eventEndPtr;
      const char *m_positionPtr;
      OPEN_INTERNAL_ENTITY *m_openInternalEntities;
      OPEN_INTERNAL_ENTITY *m_freeInternalEntities;
      XML_Bool m_defaultExpandInternalEntities;
      int m_tagLevel;
      ENTITY *m_declEntity;
      const XML_Char *m_doctypeName;
      const XML_Char *m_doctypeSysid;
      const XML_Char *m_doctypePubid;
      const XML_Char *m_declAttributeType;
      const XML_Char *m_declNotationName;
      const XML_Char *m_declNotationPublicId;
      ELEMENT_TYPE *m_declElementType;
      ATTRIBUTE_ID *m_declAttributeId;
      XML_Bool m_declAttributeIsCdata;
      XML_Bool m_declAttributeIsId;
      DTD *m_dtd;
      const XML_Char *m_curBase;
      TAG *m_tagStack;
      TAG *m_freeTagList;
      BINDING *m_inheritedBindings;
      BINDING *m_freeBindingList;
      int m_attsSize;
      int m_nSpecifiedAtts;
      int m_idAttIndex;
      ATTRIBUTE *m_atts;
      NS_ATT *m_nsAtts;
      unsigned long m_nsAttsVersion;
      unsigned char m_nsAttsPower;
      POSITION m_position;
      STRING_POOL m_tempPool;
      STRING_POOL m_temp2Pool;
      char *m_groupConnector;
      unsigned int m_groupSize;
      XML_Char m_namespaceSeparator;
      XML_Parser m_parentParser;
      XML_ParsingStatus m_parsingStatus;
    #ifdef XML_DTD
      XML_Bool m_isParamEntity;
      XML_Bool m_useForeignDTD;
      enum XML_ParamEntityParsing m_paramEntityParsing;
    #endif
    };

    #ifdef XML_UNICODE     /* Information is UTF-16 encoded. */
    #ifdef XML_UNICODE_WCHAR_T
    typedef wchar_t XML_Char;
    typedef wchar_t XML_LChar;
    #else
    typedef unsigned short XML_Char;
    typedef char XML_LChar;
    #endif /* XML_UNICODE_WCHAR_T */
    #else                  /* Information is UTF-8 encoded. */
    typedef char XML_Char;
    typedef char XML_LChar;
    #endif /* XML_UNICODE */

    static XML_Parser
    parserCreate(const XML_Char *encodingName,
                 const XML_Memory_Handling_Suite *memsuite,
                 const XML_Char *nameSep,
                 DTD *dtd)
    {
      XML_Parser parser;

      if (memsuite) {
        XML_Memory_Handling_Suite *mtemp;
        parser = (XML_Parser)
          memsuite->malloc_fcn(sizeof(struct XML_ParserStruct));
        if (parser != NULL) {
          mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem);
          mtemp->malloc_fcn = memsuite->malloc_fcn;
          mtemp->realloc_fcn = memsuite->realloc_fcn;
          mtemp->free_fcn = memsuite->free_fcn;
        }
      }
      else {
        XML_Memory_Handling_Suite *mtemp;
        parser = (XML_Parser)malloc(sizeof(struct XML_ParserStruct));
        if (parser != NULL) {
          mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem);
          mtemp->malloc_fcn = malloc;
          mtemp->realloc_fcn = realloc;
          mtemp->free_fcn = free;
        }
      }

      if (!parser)
        return parser;

      buffer = NULL;
      bufferLim = NULL;

      attsSize = INIT_ATTS_SIZE;
      atts = (ATTRIBUTE *)MALLOC(attsSize * sizeof(ATTRIBUTE));
      if (atts == NULL) {
        FREE(parser);
        return NULL;
      }
      dataBuf = (XML_Char *)MALLOC(INIT_DATA_BUF_SIZE * sizeof(XML_Char));
      if (dataBuf == NULL) {
        FREE(atts);
        FREE(parser);
        return NULL;
      }
      dataBufEnd = dataBuf + INIT_DATA_BUF_SIZE;

      if (dtd)
        _dtd = dtd;
      else {
        _dtd = dtdCreate(&parser->m_mem);
        if (_dtd == NULL) {
          FREE(dataBuf);
          FREE(atts);
          FREE(parser);
          return NULL;
        }
      }

      freeBindingList = NULL;
      freeTagList = NULL;
      freeInternalEntities = NULL;

      groupSize = 0;
      groupConnector = NULL;

      unknownEncodingHandler = NULL;
      unknownEncodingHandlerData = NULL;

      namespaceSeparator = ASCII_EXCL;
      ns = XML_FALSE;
      ns_triplets = XML_FALSE;

      nsAtts = NULL;
      nsAttsVersion = 0;
      nsAttsPower = 0;

      poolInit(&tempPool, &(parser->m_mem));
      poolInit(&temp2Pool, &(parser->m_mem));
      parserInit(parser, encodingName);

      if (encodingName && !protocolEncodingName) {
        XML_ParserFree(parser);
        return NULL;
      }

      if (nameSep) {
        ns = XML_TRUE;
        internalEncoding = XmlGetInternalEncodingNS();
        namespaceSeparator = *nameSep;
      }
      else {
        internalEncoding = XmlGetInternalEncoding();
      }

      return parser;
    }

    //create parser,xml syntax analizer

    XML_Parser xParser= parserCreate(0);

    //create documentHandler instance

    xDocumentHandler = new MyDocumentHandler();

    //register documentHandler
    xParser->setDocumentHandler( xDocumentHandler);

    //register EventHandler

    XML_SetElementHandler(xParser,call_callbackStartElement,call_callbackEndElement);

    ......
    // parse ***.xml
    try
      {
        if( xParser->GetDocumentHandler() )  

        xParser->GetDocumentHandler()->startDocument();

      xParser->parse( aParserInput );//sax event Notify

        if( xParser->GetDocumentHandler() )  

         xParser->GetDocumentHandler()->endDocument();
       }

    ps: above fragments are fetched from the usage in openoffice

  • 相关阅读:
    网页中15秒后重新发送验证码,多少秒后发送验证码
    javascript 数组去重 unique
    微信支付和微信支付通知基于sdk的说明
    php对象序列化和cookie的问题,反序列化false
    php对象序列化总出错false
    图片懒加载lazyload.js详解
    手机联动地址选择框,移动端地址联动
    Java类加载原理解析(转)
    location对象介绍
    SpringMVC使用fastjson自定义Converter支持返回jsonp格式(转)
  • 原文地址:https://www.cnblogs.com/zhyryxz/p/1956910.html
Copyright © 2011-2022 走看看