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

📄 xmlwf.c

📁 一个用visual studio C++开发的XML文件解析和生成程序.
💻 C
📖 第 1 页 / 共 2 页
字号:
  fputts(T("/>\n"), fp);}staticvoid metaCharacterData(XML_Parser parser, const XML_Char *s, int len){  FILE *fp = XML_GetUserData(parser);  fputts(T("<chars str=\""), fp);  characterData(fp, s, len);  puttc(T('"'), fp);  metaLocation(parser);  fputts(T("/>\n"), fp);}staticvoid metaStartDoctypeDecl(XML_Parser parser, const XML_Char *doctypeName){  FILE *fp = XML_GetUserData(parser);  ftprintf(fp, T("<startdoctype name=\"%s\""), doctypeName);  metaLocation(parser);  fputts(T("/>\n"), fp);}staticvoid metaEndDoctypeDecl(XML_Parser parser){  FILE *fp = XML_GetUserData(parser);  fputts(T("<enddoctype"), fp);  metaLocation(parser);  fputts(T("/>\n"), fp);}staticvoid metaUnparsedEntityDecl(XML_Parser parser,			    const XML_Char *entityName,			    const XML_Char *base,			    const XML_Char *systemId,			    const XML_Char *publicId,			    const XML_Char *notationName){  FILE *fp = XML_GetUserData(parser);  ftprintf(fp, T("<entity name=\"%s\""), entityName);  if (publicId)    ftprintf(fp, T(" public=\"%s\""), publicId);  fputts(T(" system=\""), fp);  characterData(fp, systemId, tcslen(systemId));  puttc(T('"'), fp);  ftprintf(fp, T(" notation=\"%s\""), notationName);  metaLocation(parser);  fputts(T("/>\n"), fp);}staticvoid metaNotationDecl(XML_Parser parser,		      const XML_Char *notationName,		      const XML_Char *base,		      const XML_Char *systemId,		      const XML_Char *publicId){  FILE *fp = XML_GetUserData(parser);  ftprintf(fp, T("<notation name=\"%s\""), notationName);  if (publicId)    ftprintf(fp, T(" public=\"%s\""), publicId);  if (systemId) {    fputts(T(" system=\""), fp);    characterData(fp, systemId, tcslen(systemId));    puttc(T('"'), fp);  }  metaLocation(parser);  fputts(T("/>\n"), fp);}staticvoid metaExternalParsedEntityDecl(XML_Parser parser,				  const XML_Char *entityName,				  const XML_Char *base,				  const XML_Char *systemId,				  const XML_Char *publicId){  FILE *fp = XML_GetUserData(parser);  ftprintf(fp, T("<entity name=\"%s\""), entityName);  if (publicId)    ftprintf(fp, T(" public=\"%s\""), publicId);  fputts(T(" system=\""), fp);  characterData(fp, systemId, tcslen(systemId));  puttc(T('"'), fp);  metaLocation(parser);  fputts(T("/>\n"), fp);}staticvoid metaInternalParsedEntityDecl(XML_Parser parser,				  const XML_Char *entityName,				  const XML_Char *text,				  int textLen){  FILE *fp = XML_GetUserData(parser);  ftprintf(fp, T("<entity name=\"%s\""), entityName);  metaLocation(parser);  puttc(T('>'), fp);  characterData(fp, text, textLen);  fputts(T("</entity/>\n"), fp);}staticvoid metaStartNamespaceDecl(XML_Parser parser,			    const XML_Char *prefix,			    const XML_Char *uri){  FILE *fp = XML_GetUserData(parser);  fputts(T("<startns"), fp);  if (prefix)    ftprintf(fp, T(" prefix=\"%s\""), prefix);  if (uri) {    fputts(T(" ns=\""), fp);    characterData(fp, uri, tcslen(uri));    fputts(T("\"/>\n"), fp);  }  else    fputts(T("/>\n"), fp);}staticvoid metaEndNamespaceDecl(XML_Parser parser, const XML_Char *prefix){  FILE *fp = XML_GetUserData(parser);  if (!prefix)    fputts(T("<endns/>\n"), fp);  else    ftprintf(fp, T("<endns prefix=\"%s\"/>\n"), prefix);}staticint unknownEncodingConvert(void *data, const char *p){  return codepageConvert(*(int *)data, p);}staticint unknownEncoding(void *userData,		    const XML_Char *name,		    XML_Encoding *info){  int cp;  static const XML_Char prefixL[] = T("windows-");  static const XML_Char prefixU[] = T("WINDOWS-");  int i;  for (i = 0; prefixU[i]; i++)    if (name[i] != prefixU[i] && name[i] != prefixL[i])      return 0;    cp = 0;  for (; name[i]; i++) {    static const XML_Char digits[] = T("0123456789");    const XML_Char *s = tcschr(digits, name[i]);    if (!s)      return 0;    cp *= 10;    cp += s - digits;    if (cp >= 0x10000)      return 0;  }  if (!codepageMap(cp, info->map))    return 0;  info->convert = unknownEncodingConvert;  /* We could just cast the code page integer to a void *,  and avoid the use of release. */  info->release = free;  info->data = malloc(sizeof(int));  if (!info->data)    return 0;  *(int *)info->data = cp;  return 1;}staticint notStandalone(void *userData){  return 0;}staticvoid usage(const XML_Char *prog){  ftprintf(stderr, T("usage: %s [-n] [-p] [-r] [-s] [-w] [-x] [-d output-dir] [-e encoding] file ...\n"), prog);  exit(1);}int tmain(int argc, XML_Char **argv){  int i, j;  const XML_Char *outputDir = 0;  const XML_Char *encoding = 0;  unsigned processFlags = XML_MAP_FILE;  int windowsCodePages = 0;  int outputType = 0;  int useNamespaces = 0;  int requireStandalone = 0;  int paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER;#ifdef _MSC_VER  _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);#endif  i = 1;  j = 0;  while (i < argc) {    if (j == 0) {      if (argv[i][0] != T('-'))	break;      if (argv[i][1] == T('-') && argv[i][2] == T('\0')) {	i++;	break;      }      j++;    }    switch (argv[i][j]) {    case T('r'):      processFlags &= ~XML_MAP_FILE;      j++;      break;    case T('s'):      requireStandalone = 1;      j++;      break;    case T('n'):      useNamespaces = 1;      j++;      break;    case T('p'):      paramEntityParsing = XML_PARAM_ENTITY_PARSING_ALWAYS;      /* fall through */    case T('x'):      processFlags |= XML_EXTERNAL_ENTITIES;      j++;      break;    case T('w'):      windowsCodePages = 1;      j++;      break;    case T('m'):      outputType = 'm';      j++;      break;    case T('c'):      outputType = 'c';      useNamespaces = 0;      j++;      break;    case T('t'):      outputType = 't';      j++;      break;    case T('d'):      if (argv[i][j + 1] == T('\0')) {	if (++i == argc)	  usage(argv[0]);	outputDir = argv[i];      }      else	outputDir = argv[i] + j + 1;      i++;      j = 0;      break;    case T('e'):      if (argv[i][j + 1] == T('\0')) {	if (++i == argc)	  usage(argv[0]);	encoding = argv[i];      }      else	encoding = argv[i] + j + 1;      i++;      j = 0;      break;    case T('\0'):      if (j > 1) {	i++;	j = 0;	break;      }      /* fall through */    default:      usage(argv[0]);    }  }  if (i == argc)    usage(argv[0]);  for (; i < argc; i++) {    FILE *fp = 0;    XML_Char *outName = 0;    int result;    XML_Parser parser;    if (useNamespaces)      parser = XML_ParserCreateNS(encoding, NSSEP);    else      parser = XML_ParserCreate(encoding);    if (requireStandalone)      XML_SetNotStandaloneHandler(parser, notStandalone);    XML_SetParamEntityParsing(parser, paramEntityParsing);    if (outputType == 't') {      /* This is for doing timings; this gives a more realistic estimate of	 the parsing time. */      outputDir = 0;      XML_SetElementHandler(parser, nopStartElement, nopEndElement);      XML_SetCharacterDataHandler(parser, nopCharacterData);      XML_SetProcessingInstructionHandler(parser, nopProcessingInstruction);    }    else if (outputDir) {      const XML_Char *file = argv[i];      if (tcsrchr(file, T('/')))	file = tcsrchr(file, T('/')) + 1;#ifdef WIN32      if (tcsrchr(file, T('\\')))	file = tcsrchr(file, T('\\')) + 1;#endif      outName = malloc((tcslen(outputDir) + tcslen(file) + 2) * sizeof(XML_Char));      tcscpy(outName, outputDir);      tcscat(outName, T("/"));      tcscat(outName, file);      fp = tfopen(outName, T("wb"));      if (!fp) {	tperror(outName);	exit(1);      }      setvbuf(fp, NULL, _IOFBF, 16384);#ifdef XML_UNICODE      puttc(0xFEFF, fp);#endif      XML_SetUserData(parser, fp);      switch (outputType) {      case 'm':	XML_UseParserAsHandlerArg(parser);	XML_SetElementHandler(parser, metaStartElement, metaEndElement);	XML_SetProcessingInstructionHandler(parser, metaProcessingInstruction);	XML_SetCommentHandler(parser, metaComment);	XML_SetCdataSectionHandler(parser, metaStartCdataSection, metaEndCdataSection);	XML_SetCharacterDataHandler(parser, metaCharacterData);	XML_SetDoctypeDeclHandler(parser, metaStartDoctypeDecl, metaEndDoctypeDecl);	XML_SetUnparsedEntityDeclHandler(parser, metaUnparsedEntityDecl);	XML_SetNotationDeclHandler(parser, metaNotationDecl);	XML_SetExternalParsedEntityDeclHandler(parser, metaExternalParsedEntityDecl);	XML_SetInternalParsedEntityDeclHandler(parser, metaInternalParsedEntityDecl);	XML_SetNamespaceDeclHandler(parser, metaStartNamespaceDecl, metaEndNamespaceDecl);	metaStartDocument(parser);	break;      case 'c':	XML_UseParserAsHandlerArg(parser);	XML_SetDefaultHandler(parser, markup);	XML_SetElementHandler(parser, defaultStartElement, defaultEndElement);	XML_SetCharacterDataHandler(parser, defaultCharacterData);	XML_SetProcessingInstructionHandler(parser, defaultProcessingInstruction);	break;      default:	if (useNamespaces)	  XML_SetElementHandler(parser, startElementNS, endElementNS);	else	  XML_SetElementHandler(parser, startElement, endElement);	XML_SetCharacterDataHandler(parser, characterData);#ifndef W3C14N	XML_SetProcessingInstructionHandler(parser, processingInstruction);#endif /* not W3C14N */	break;      }    }    if (windowsCodePages)      XML_SetUnknownEncodingHandler(parser, unknownEncoding, 0);    result = XML_ProcessFile(parser, argv[i], processFlags);    if (outputDir) {      if (outputType == 'm')	metaEndDocument(parser);      fclose(fp);      if (!result)	tremove(outName);      free(outName);    }    XML_ParserFree(parser);  }  return 0;}

⌨️ 快捷键说明

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