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

📄 xmllint.c

📁 libxml,在UNIX/LINUX下非常重要的一个库,为XML相关应用提供方便.目前上载的是最新版本,若要取得最新版本,请参考里面的readme.
💻 C
📖 第 1 页 / 共 5 页
字号:
    /* We don't have gettimeofday, time or stdarg.h, what crazy world is     * this ?!     */#endif}#endif/************************************************************************ * 									* * 			HTML ouput					* * 									* ************************************************************************/char buffer[50000];static voidxmlHTMLEncodeSend(void) {    char *result;    result = (char *) xmlEncodeEntitiesReentrant(NULL, BAD_CAST buffer);    if (result) {	xmlGenericError(xmlGenericErrorContext, "%s", result);	xmlFree(result);    }    buffer[0] = 0;}/** * xmlHTMLPrintFileInfo: * @input:  an xmlParserInputPtr input *  * Displays the associated file and line informations for the current input */static voidxmlHTMLPrintFileInfo(xmlParserInputPtr input) {    int len;    xmlGenericError(xmlGenericErrorContext, "<p>");    len = strlen(buffer);    if (input != NULL) {	if (input->filename) {	    snprintf(&buffer[len], sizeof(buffer) - len, "%s:%d: ", input->filename,		    input->line);	} else {	    snprintf(&buffer[len], sizeof(buffer) - len, "Entity: line %d: ", input->line);	}    }    xmlHTMLEncodeSend();}/** * xmlHTMLPrintFileContext: * @input:  an xmlParserInputPtr input *  * Displays current context within the input content for error tracking */static voidxmlHTMLPrintFileContext(xmlParserInputPtr input) {    const xmlChar *cur, *base;    int len;    int n;    if (input == NULL) return;    xmlGenericError(xmlGenericErrorContext, "<pre>\n");    cur = input->cur;    base = input->base;    while ((cur > base) && ((*cur == '\n') || (*cur == '\r'))) {	cur--;    }    n = 0;    while ((n++ < 80) && (cur > base) && (*cur != '\n') && (*cur != '\r'))        cur--;    if ((*cur == '\n') || (*cur == '\r')) cur++;    base = cur;    n = 0;    while ((*cur != 0) && (*cur != '\n') && (*cur != '\r') && (n < 79)) {	len = strlen(buffer);        snprintf(&buffer[len], sizeof(buffer) - len, "%c", 		    (unsigned char) *cur++);	n++;    }    len = strlen(buffer);    snprintf(&buffer[len], sizeof(buffer) - len, "\n");    cur = input->cur;    while ((*cur == '\n') || (*cur == '\r'))	cur--;    n = 0;    while ((cur != base) && (n++ < 80)) {	len = strlen(buffer);        snprintf(&buffer[len], sizeof(buffer) - len, " ");        base++;    }    len = strlen(buffer);    snprintf(&buffer[len], sizeof(buffer) - len, "^\n");    xmlHTMLEncodeSend();    xmlGenericError(xmlGenericErrorContext, "</pre>");}/** * xmlHTMLError: * @ctx:  an XML parser context * @msg:  the message to display/transmit * @...:  extra parameters for the message display *  * Display and format an error messages, gives file, line, position and * extra parameters. */static voidxmlHTMLError(void *ctx, const char *msg, ...){    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;    xmlParserInputPtr input;    va_list args;    int len;    buffer[0] = 0;    input = ctxt->input;    if ((input != NULL) && (input->filename == NULL) && (ctxt->inputNr > 1)) {        input = ctxt->inputTab[ctxt->inputNr - 2];    }            xmlHTMLPrintFileInfo(input);    xmlGenericError(xmlGenericErrorContext, "<b>error</b>: ");    va_start(args, msg);    len = strlen(buffer);    vsnprintf(&buffer[len],  sizeof(buffer) - len, msg, args);    va_end(args);    xmlHTMLEncodeSend();    xmlGenericError(xmlGenericErrorContext, "</p>\n");    xmlHTMLPrintFileContext(input);    xmlHTMLEncodeSend();}/** * xmlHTMLWarning: * @ctx:  an XML parser context * @msg:  the message to display/transmit * @...:  extra parameters for the message display *  * Display and format a warning messages, gives file, line, position and * extra parameters. */static voidxmlHTMLWarning(void *ctx, const char *msg, ...){    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;    xmlParserInputPtr input;    va_list args;    int len;    buffer[0] = 0;    input = ctxt->input;    if ((input != NULL) && (input->filename == NULL) && (ctxt->inputNr > 1)) {        input = ctxt->inputTab[ctxt->inputNr - 2];    }            xmlHTMLPrintFileInfo(input);            xmlGenericError(xmlGenericErrorContext, "<b>warning</b>: ");    va_start(args, msg);    len = strlen(buffer);        vsnprintf(&buffer[len],  sizeof(buffer) - len, msg, args);    va_end(args);    xmlHTMLEncodeSend();    xmlGenericError(xmlGenericErrorContext, "</p>\n");    xmlHTMLPrintFileContext(input);    xmlHTMLEncodeSend();}/** * xmlHTMLValidityError: * @ctx:  an XML parser context * @msg:  the message to display/transmit * @...:  extra parameters for the message display *  * Display and format an validity error messages, gives file, * line, position and extra parameters. */static voidxmlHTMLValidityError(void *ctx, const char *msg, ...){    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;    xmlParserInputPtr input;    va_list args;    int len;    buffer[0] = 0;    input = ctxt->input;    if ((input->filename == NULL) && (ctxt->inputNr > 1))        input = ctxt->inputTab[ctxt->inputNr - 2];            xmlHTMLPrintFileInfo(input);    xmlGenericError(xmlGenericErrorContext, "<b>validity error</b>: ");    len = strlen(buffer);    va_start(args, msg);    vsnprintf(&buffer[len],  sizeof(buffer) - len, msg, args);    va_end(args);    xmlHTMLEncodeSend();    xmlGenericError(xmlGenericErrorContext, "</p>\n");    xmlHTMLPrintFileContext(input);    xmlHTMLEncodeSend();    progresult = XMLLINT_ERR_VALID;}/** * xmlHTMLValidityWarning: * @ctx:  an XML parser context * @msg:  the message to display/transmit * @...:  extra parameters for the message display *  * Display and format a validity warning messages, gives file, line, * position and extra parameters. */static voidxmlHTMLValidityWarning(void *ctx, const char *msg, ...){    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;    xmlParserInputPtr input;    va_list args;    int len;    buffer[0] = 0;    input = ctxt->input;    if ((input->filename == NULL) && (ctxt->inputNr > 1))        input = ctxt->inputTab[ctxt->inputNr - 2];    xmlHTMLPrintFileInfo(input);            xmlGenericError(xmlGenericErrorContext, "<b>validity warning</b>: ");    va_start(args, msg);    len = strlen(buffer);     vsnprintf(&buffer[len],  sizeof(buffer) - len, msg, args);    va_end(args);    xmlHTMLEncodeSend();    xmlGenericError(xmlGenericErrorContext, "</p>\n");    xmlHTMLPrintFileContext(input);    xmlHTMLEncodeSend();}/************************************************************************ * 									* * 			Shell Interface					* * 									* ************************************************************************/#ifdef LIBXML_DEBUG_ENABLED#ifdef LIBXML_XPATH_ENABLED/** * xmlShellReadline: * @prompt:  the prompt value * * Read a string *  * Returns a pointer to it or NULL on EOF the caller is expected to *     free the returned string. */static char *xmlShellReadline(char *prompt) {#ifdef HAVE_LIBREADLINE    char *line_read;    /* Get a line from the user. */    line_read = readline (prompt);    /* If the line has any text in it, save it on the history. */    if (line_read && *line_read)	add_history (line_read);    return (line_read);#else    char line_read[501];    char *ret;    int len;    if (prompt != NULL)	fprintf(stdout, "%s", prompt);    if (!fgets(line_read, 500, stdin))        return(NULL);    line_read[500] = 0;    len = strlen(line_read);    ret = (char *) malloc(len + 1);    if (ret != NULL) {	memcpy (ret, line_read, len + 1);    }    return(ret);#endif}#endif /* LIBXML_XPATH_ENABLED */#endif /* LIBXML_DEBUG_ENABLED *//************************************************************************ * 									* * 			I/O Interfaces					* * 									* ************************************************************************/static int myRead(FILE *f, char * buf, int len) {    return(fread(buf, 1, len, f));}static void myClose(FILE *f) {  if (f != stdin) {    fclose(f);  }}#ifdef LIBXML_READER_ENABLED/************************************************************************ * 									* * 			Stream Test processing				* * 									* ************************************************************************/static void processNode(xmlTextReaderPtr reader) {    const xmlChar *name, *value;    int type, empty;    type = xmlTextReaderNodeType(reader);    empty = xmlTextReaderIsEmptyElement(reader);    if (debug) {	name = xmlTextReaderConstName(reader);	if (name == NULL)	    name = BAD_CAST "--";	value = xmlTextReaderConstValue(reader);		printf("%d %d %s %d %d", 		xmlTextReaderDepth(reader),		type,		name,		empty,		xmlTextReaderHasValue(reader));	if (value == NULL)	    printf("\n");	else {	    printf(" %s\n", value);	}    }#ifdef LIBXML_PATTERN_ENABLED    if (patternc) {        xmlChar *path = NULL;        int match = -1;		if (type == XML_READER_TYPE_ELEMENT) {	    /* do the check only on element start */	    match = xmlPatternMatch(patternc, xmlTextReaderCurrentNode(reader));	    if (match) {		path = xmlGetNodePath(xmlTextReaderCurrentNode(reader));		printf("Node %s matches pattern %s\n", path, pattern);	    }	}	if (patstream != NULL) {	    int ret;	    if (type == XML_READER_TYPE_ELEMENT) {		ret = xmlStreamPush(patstream,		                    xmlTextReaderConstLocalName(reader),				    xmlTextReaderConstNamespaceUri(reader));		if (ret < 0) {		    fprintf(stderr, "xmlStreamPush() failure\n");                    xmlFreeStreamCtxt(patstream);		    patstream = NULL;		} else if (ret != match) {		    if (path == NULL) {		        path = xmlGetNodePath(		                       xmlTextReaderCurrentNode(reader));		    }		    fprintf(stderr,		            "xmlPatternMatch and xmlStreamPush disagree\n");		    fprintf(stderr,		            "  pattern %s node %s\n",			    pattern, path);		}			    } 	    if ((type == XML_READER_TYPE_END_ELEMENT) ||	        ((type == XML_READER_TYPE_ELEMENT) && (empty))) {	        ret = xmlStreamPop(patstream);		if (ret < 0) {		    fprintf(stderr, "xmlStreamPop() failure\n");                    xmlFreeStreamCtxt(patstream);		    patstream = NULL;		}	    }	}	if (path != NULL)	    xmlFree(path);    }#endif}static void streamFile(char *filename) {    xmlTextReaderPtr reader;    int ret;#ifdef HAVE_SYS_MMAN_H    int fd = -1;    struct stat info;    const char *base = NULL;    xmlParserInputBufferPtr input = NULL;    if (memory) {	if (stat(filename, &info) < 0) 	    return;	if ((fd = open(filename, O_RDONLY)) < 0)	    return;	base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ;	if (base == (void *) MAP_FAILED)	    return;	reader = xmlReaderForMemory(base, info.st_size, filename,	                            NULL, options);    } else#endif	reader = xmlReaderForFile(filename, NULL, options);#ifdef LIBXML_PATTERN_ENABLED    if (pattern != NULL) {        patternc = xmlPatterncompile((const xmlChar *) pattern, NULL, 0, NULL);	if (patternc == NULL) {	    xmlGenericError(xmlGenericErrorContext,		    "Pattern %s failed to compile\n", pattern);            progresult = XMLLINT_ERR_SCHEMAPAT;	    pattern = NULL;	}    }    if (patternc != NULL) {        patstream = xmlPatternGetStreamCtxt(patternc);	if (patstream != NULL) {	    ret = xmlStreamPush(patstream, NULL, NULL);	    if (ret < 0) {		fprintf(stderr, "xmlStreamPush() failure\n");		xmlFreeStreamCtxt(patstream);		patstream = NULL;            }	}    }#endif    if (reader != NULL) {#ifdef LIBXML_VALID_ENABLED	if (valid)	    xmlTextReaderSetParserProp(reader, XML_PARSER_VALIDATE, 1);	else#endif /* LIBXML_VALID_ENABLED */	    xmlTextReaderSetParserProp(reader, XML_PARSER_LOADDTD, 1);#ifdef LIBXML_SCHEMAS_ENABLED	if (relaxng != NULL) {	    if ((timing) && (!repeat)) {		startTimer();	    }	    ret = xmlTextReaderRelaxNGValidate(reader, relaxng);	    if (ret < 0) {		xmlGenericError(xmlGenericErrorContext,			"Relax-NG schema %s failed to compile\n", relaxng);		progresult = XMLLINT_ERR_SCHEMACOMP;		relaxng = NULL;	    }	    if ((timing) && (!repeat)) {		endTimer("Compiling the schemas");	    }	}#endif	/*	 * Process all nodes in sequence	 */	if ((timing) && (!repeat)) {	    startTimer();	}	ret = xmlTextReaderRead(reader);	while (ret == 1) {	    if ((debug)#ifdef LIBXML_PATTERN_ENABLED	        || (patternc)#endif	       )		processNode(reader);	    ret = xmlTextReaderRead(reader);	}	if ((timing) && (!repeat)) {#ifdef LIBXML_SCHEMAS_ENABLED	    if (relaxng != NULL)

⌨️ 快捷键说明

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