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

📄 xmllint.c

📁 SIP 1.5.0源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    if (prompt != NULL)	fprintf(stdout, "%s", prompt);    if (!fgets(line_read, 500, stdin))        return(NULL);    line_read[500] = 0;    return(strdup(line_read));#endif}/************************************************************************ * 									* * 			I/O Interfaces					* * 									* ************************************************************************/int myRead(FILE *f, char * buffer, int len) {    return(fread(buffer, 1, len, f));}void myClose(FILE *f) {    fclose(f);}/************************************************************************ * 									* * 			Test processing					* * 									* ************************************************************************/void parseAndPrintFile(char *filename) {    xmlDocPtr doc = NULL, tmp;#ifdef LIBXML_HTML_ENABLED    if (html) {	doc = htmlParseFile(filename, NULL);    } else {#endif /* LIBXML_HTML_ENABLED */	/*	 * build an XML tree from a string;	 */	if (push) {	    FILE *f;	    f = fopen(filename, "r");	    if (f != NULL) {	        int res, size = 3;	        char chars[1024];                xmlParserCtxtPtr ctxt;		if (repeat)		    size = 1024;		res = fread(chars, 1, 4, f);		if (res > 0) {		    ctxt = xmlCreatePushParserCtxt(NULL, NULL,		                chars, res, filename);		    while ((res = fread(chars, 1, size, f)) > 0) {			xmlParseChunk(ctxt, chars, res, 0);		    }		    xmlParseChunk(ctxt, chars, 0, 1);		    doc = ctxt->myDoc;		    xmlFreeParserCtxt(ctxt);	        }	    }	} else if (testIO) {	    int ret;	    FILE *f;	    f = fopen(filename, "r");	    if (f != NULL) {                xmlParserCtxtPtr ctxt;		ctxt = xmlCreateIOParserCtxt(NULL, NULL,			    (xmlInputReadCallback) myRead,			    (xmlInputCloseCallback) myClose,			    f, XML_CHAR_ENCODING_NONE);		xmlParseDocument(ctxt);		ret = ctxt->wellFormed;		doc = ctxt->myDoc;		xmlFreeParserCtxt(ctxt);		if (!ret) {		    xmlFreeDoc(doc);		    doc = NULL;		}	    }	} else if (recovery) {	    doc = xmlRecoverFile(filename);	} else if (htmlout) {	    int ret;	    xmlParserCtxtPtr ctxt;	    xmlSAXHandler silent, *old;	    ctxt = xmlCreateFileParserCtxt(filename);	    memcpy(&silent, ctxt->sax, sizeof(silent));	    old = ctxt->sax;	    silent.error = xmlHTMLError;	    if (xmlGetWarningsDefaultValue)		silent.warning = xmlHTMLWarning;	    else 		silent.warning = NULL;	    silent.fatalError = xmlHTMLError;            ctxt->sax = &silent;	    ctxt->vctxt.error = xmlHTMLValidityError;	    if (xmlGetWarningsDefaultValue)		ctxt->vctxt.warning = xmlHTMLValidityWarning;	    else 		ctxt->vctxt.warning = NULL;	    xmlParseDocument(ctxt);	    ret = ctxt->wellFormed;	    doc = ctxt->myDoc;	    ctxt->sax = old;	    xmlFreeParserCtxt(ctxt);	    if (!ret) {		xmlFreeDoc(doc);		doc = NULL;	    }	} else	    doc = xmlParseFile(filename);#ifdef LIBXML_HTML_ENABLED    }#endif#ifdef LIBXML_DEBUG_ENABLED    /*     * shell interraction     */    if (shell)          xmlShell(doc, filename, xmlShellReadline, stdout);#endif    /*     * test intermediate copy if needed.     */    if (copy) {        tmp = doc;	doc = xmlCopyDoc(doc, 1);	xmlFreeDoc(tmp);    }    if ((insert) && (!html)) {        const xmlChar* list[256];	int nb, i;	xmlNodePtr node;	if (doc->children != NULL) {	    node = doc->children;	    while ((node != NULL) && (node->last == NULL)) node = node->next;	    if (node != NULL) {		nb = xmlValidGetValidElements(node->last, NULL, list, 256);		if (nb < 0) {		    printf("could not get valid list of elements\n");		} else if (nb == 0) {		    printf("No element can be indersted under root\n");		} else {		    printf("%d element types can be indersted under root:\n",		           nb);		    for (i = 0;i < nb;i++) {			 printf("%s\n", list[i]);		    }		}	    }	}        }else if (noout == 0) {	/*	 * print it.	 */#ifdef LIBXML_DEBUG_ENABLED	if (!debug) {#endif	    if (compress)		xmlSaveFile("-", doc);	    else		xmlDocDump(stdout, doc);#ifdef LIBXML_DEBUG_ENABLED	} else	    xmlDebugDumpDocument(stdout, doc);#endif    }    /*     * A posteriori validation test     */    if (postvalid) {	xmlValidCtxt cvp;	cvp.userData = (void *) stderr;                                                 cvp.error    = (xmlValidityErrorFunc) fprintf;                                  cvp.warning  = (xmlValidityWarningFunc) fprintf;	xmlValidateDocument(&cvp, doc);    }#ifdef LIBXML_DEBUG_ENABLED    if ((debugent) && (!html))	xmlDebugDumpEntities(stdout, doc);#endif    /*     * free it.     */    xmlFreeDoc(doc);}int main(int argc, char **argv) {    int i, count;    int files = 0;    for (i = 1; i < argc ; i++) {#ifdef LIBXML_DEBUG_ENABLED	if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))	    debug++;	else if ((!strcmp(argv[i], "-debugent")) || (!strcmp(argv[i], "--debugent")))	    debugent++;	else if ((!strcmp(argv[i], "-shell")) ||	         (!strcmp(argv[i], "--shell"))) {	    shell++;            noout = 1;        } else #endif	if ((!strcmp(argv[i], "-copy")) || (!strcmp(argv[i], "--copy")))	    copy++;	else if ((!strcmp(argv[i], "-recover")) ||	         (!strcmp(argv[i], "--recover")))	    recovery++;	else if ((!strcmp(argv[i], "-noent")) ||	         (!strcmp(argv[i], "--noent")))	    noent++;	else if ((!strcmp(argv[i], "-noout")) ||	         (!strcmp(argv[i], "--noout")))	    noout++;	else if ((!strcmp(argv[i], "-htmlout")) ||	         (!strcmp(argv[i], "--htmlout")))	    htmlout++;#ifdef LIBXML_HTML_ENABLED	else if ((!strcmp(argv[i], "-html")) ||	         (!strcmp(argv[i], "--html"))) {	    html++;        }#endif /* LIBXML_HTML_ENABLED */	else if ((!strcmp(argv[i], "-nowrap")) ||	         (!strcmp(argv[i], "--nowrap")))	    nowrap++;	else if ((!strcmp(argv[i], "-valid")) ||	         (!strcmp(argv[i], "--valid")))	    valid++;	else if ((!strcmp(argv[i], "-postvalid")) ||	         (!strcmp(argv[i], "--postvalid")))	    postvalid++;	else if ((!strcmp(argv[i], "-insert")) ||	         (!strcmp(argv[i], "--insert")))	    insert++;	else if ((!strcmp(argv[i], "-repeat")) ||	         (!strcmp(argv[i], "--repeat")))	    repeat++;	else if ((!strcmp(argv[i], "-push")) ||	         (!strcmp(argv[i], "--push")))	    push++;	else if ((!strcmp(argv[i], "-testIO")) ||	         (!strcmp(argv[i], "--testIO")))	    testIO++;	else if ((!strcmp(argv[i], "-compress")) ||	         (!strcmp(argv[i], "--compress"))) {	    compress++;	    xmlSetCompressMode(9);        }	else if ((!strcmp(argv[i], "-nowarning")) ||	         (!strcmp(argv[i], "--nowarning"))) {	    xmlGetWarningsDefaultValue = 0;        }	else if ((!strcmp(argv[i], "-noblanks")) ||	         (!strcmp(argv[i], "--noblanks"))) {	     noblanks++;	     xmlKeepBlanksDefault(0);        }    }    if (noent != 0) xmlSubstituteEntitiesDefault(1);    if (valid != 0) xmlDoValidityCheckingDefaultValue = 1;    if ((htmlout) && (!nowrap)) {	fprintf(stderr,         "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"\n");	fprintf(stderr, "\t\"http://www.w3.org/TR/REC-html40/loose.dtd\">\n");	fprintf(stderr,	 "<html><head><title>%s output</title></head>\n",		argv[0]);	fprintf(stderr, 	 "<body bgcolor=\"#ffffff\"><h1 align=\"center\">%s output</h1>\n",		argv[0]);    }    for (i = 1; i < argc ; i++) {	if (argv[i][0] != '-') {	    if (repeat) {		for (count = 0;count < 100 * repeat;count++)		    parseAndPrintFile(argv[i]);	    } else		parseAndPrintFile(argv[i]);	    files ++;	}    }    if ((htmlout) && (!nowrap)) {	fprintf(stderr, "</body></html>\n");    }    if (files == 0) {	printf("Usage : %s [--debug] [--debugent] [--copy] [--recover] [--noent] [--noout] [--valid] [--repeat] XMLfiles ...\n",	       argv[0]);	printf("\tParse the XML files and output the result of the parsing\n");#ifdef LIBXML_DEBUG_ENABLED	printf("\t--debug : dump a debug tree of the in-memory document\n");	printf("\t--shell : run a navigating shell\n");	printf("\t--debugent : debug the entities defined in the document\n");#endif	printf("\t--copy : used to test the internal copy implementation\n");	printf("\t--recover : output what was parsable on broken XML documents\n");	printf("\t--noent : substitute entity references by their value\n");	printf("\t--noout : don't output the result tree\n");	printf("\t--htmlout : output results as HTML\n");	printf("\t--nowarp : do not put HTML doc wrapper\n");	printf("\t--valid : validate the document in addition to std well-formed check\n");	printf("\t--postvalid : do a posteriori validation, i.e after parsing\n");	printf("\t--repeat : repeat 100 times, for timing or profiling\n");	printf("\t--insert : ad-hoc test for valid insertions\n");	printf("\t--compress : turn on gzip compression of output\n");#ifdef LIBXML_HTML_ENABLED	printf("\t--html : use the HTML parser\n");#endif	printf("\t--push : use the push mode of the parser\n");	printf("\t--nowarning : do not emit warnings from parser/validator\n");	printf("\t--noblanks : drop (ignorable?) blanks spaces\n");	printf("\t--testIO : test user I/O support\n");    }    xmlCleanupParser();    xmlMemoryDump();    return(0);}

⌨️ 快捷键说明

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