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

📄 xmllint.c.svn-base

📁 这是一个用于解析xml文件的类库。使用这个类库
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
    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();}/** * 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/** * 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_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;    name = xmlTextReaderConstName(reader);    if (name == NULL)	name = BAD_CAST "--";    value = xmlTextReaderConstValue(reader);    printf("%d %d %s %d %d", 	    xmlTextReaderDepth(reader),	    xmlTextReaderNodeType(reader),	    name,	    xmlTextReaderIsEmptyElement(reader),	    xmlTextReaderHasValue(reader));    if (value == NULL)	printf("\n");    else {	printf(" %s\n", value);    }#ifdef LIBXML_PATTERN_ENABLED    if (patternc) {        if (xmlPatternMatch(patternc, xmlTextReaderCurrentNode(reader)) == 1) {	    printf("Node matches pattern %s\n", pattern);	}    }#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);    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 = 5;		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)		endTimer("Parsing and validating");	    else#endif#ifdef LIBXML_VALID_ENABLED	    if (valid)		endTimer("Parsing and validating");	    else#endif	    endTimer("Parsing");	}#ifdef LIBXML_VALID_ENABLED	if (valid) {	    if (xmlTextReaderIsValid(reader) != 1) {		xmlGenericError(xmlGenericErrorContext,			"Document %s does not validate\n", filename);		progresult = 3;	    }	}#endif /* LIBXML_VALID_ENABLED */#ifdef LIBXML_SCHEMAS_ENABLED	if (relaxng != NULL) {	    if (xmlTextReaderIsValid(reader) != 1) {		fprintf(stderr, "%s fails to validate\n", filename);		progresult = 3;	    } else {		fprintf(stderr, "%s validates\n", filename);	    }	}#endif	/*	 * Done, cleanup and status	 */	xmlFreeTextReader(reader);	if (ret != 0) {	    fprintf(stderr, "%s : failed to parse\n", filename);	    progresult = 1;	}    } else {	fprintf(stderr, "Unable to open %s\n", filename);	progresult = 1;    }#ifdef HAVE_SYS_MMAN_H    if (memory) {        xmlFreeParserInputBuffer(input);	munmap((char *) base, info.st_size);	close(fd);    }#endif}static void walkDoc(xmlDocPtr doc) {    xmlTextReaderPtr reader;    int ret;    reader = xmlReaderWalker(doc);    if (reader != NULL) {	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)) {	    endTimer("walking through the doc");	}	xmlFreeTextReader(reader);	if (ret != 0) {	    fprintf(stderr, "failed to walk through the doc\n");	    progresult = 1;	}    } else {	fprintf(stderr, "Failed to crate a reader from the document\n");	progresult = 1;    }}#endif /* LIBXML_READER_ENABLED *//************************************************************************ * 									* * 			Tree Test processing				* * 									* ************************************************************************/static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) {    xmlDocPtr doc = NULL;#ifdef LIBXML_TREE_ENABLED    xmlDocPtr tmp;#endif /* LIBXML_TREE_ENABLED */    if ((timing) && (!repeat))	startTimer();    #ifdef LIBXML_TREE_ENABLED    if (filename == NULL) {	if (generate) {	    xmlNodePtr n;	    doc = xmlNewDoc(BAD_CAST "1.0");	    n = xmlNewNode(NULL, BAD_CAST "info");	    xmlNodeSetContent(n, BAD_CAST "abc");	    xmlDocSetRootElement(doc, n);	}    }#endif /* LIBXML_TREE_ENABLED */#ifdef LIBXML_HTML_ENABLED#ifdef LIBXML_PUSH_ENABLED    else if ((html) && (push)) {        FILE *f;        f = fopen(filename, "r");        if (f != NULL) {            int res, size = 3;            char chars[4096];            htmlParserCtxtPtr ctxt;            /* if (repeat) */                size = 4096;            res = fread(chars, 1, 4, f);            if (res > 0) {                ctxt = htmlCreatePushParserCtxt(NULL, NULL,                            chars, res, filename, XML_CHAR_ENCODING_NONE);                while ((res = fread(chars, 1, size, f)) > 0) {                    htmlParseChunk(ctxt, chars, res, 0);                }                htmlParseChunk(ctxt, chars, 0, 1);                doc = ctxt->myDoc;                htmlFreeParserCtxt(ctxt);            }            fclose(f);        }    }#endif /* LIBXML_PUSH_ENABLED */    else if (html) {	doc = htmlReadFile(filename, NULL, options);    }#endif /* LIBXML_HTML_ENABLED */    else {#ifdef LIBXML_PUSH_ENABLED	/*	 * build an XML tree from a string;	 */	if (push) {	    FILE *f;	    /* '-' Usually means stdin -<sven@zen.org> */	    if ((filename[0] == '-') && (filename[1] == 0)) {	      f = stdin;	    } else {	      f = fopen(filename, "r");	    }	    if (f != NULL) {		int ret;	        int res, size = 1024;	        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);		    xmlCtxtUseOptions(ctxt, options);		    while ((res = fread(chars, 1, size, f)) > 0) {			xmlParseChunk(ctxt, chars, res, 0);		    }		    xmlParseChunk(ctxt, chars, 0, 1);		    doc = ctxt->myDoc;		    ret = ctxt->wellFormed;		    xmlFreeParserCtxt(ctxt);		    if (!ret) {			xmlFreeDoc(doc);			doc = NULL;		    }	        }	    }	} else#endif /* LIBXML_PUSH_ENABLED */        if (testIO) {	    if ((filename[0] == '-') && (filename[1] == 0)) {	        doc = xmlReadFd(0, NULL, NULL, options);	    } else {	        FILE *f;		f = fopen(filename, "r");		if (f != NULL) {		    if (rectxt == NULL)			doc = xmlReadIO((xmlInputReadCallback) myRead,					(xmlInputCloseCallback) myClose, f,					filename, NULL, options);		    else			doc = xmlCtxtReadIO(rectxt,			                (xmlInputReadCallback) myRead,					(xmlInputCloseCallback) myClose, f,					filename, NULL, options);		} else		    doc = NULL;	    }	} else if (htmlout) {	    xmlParserCtxtPtr ctxt;	    if (rectxt == NULL)		ctxt = xmlNewParserCtxt();	    else	        ctxt = rectxt;	    if (ctxt == NULL) {	      	        doc = NULL;	    } else {	        ctxt->sax->error = xmlHTMLError;	        ctxt->sax->warning = xmlHTMLWarning;	        ctxt->vctxt.error = xmlHTMLValidityError;	        ctxt->vctxt.warning = xmlHTMLValidityWarning;		doc = xmlCtxtReadFile(ctxt, filename, NULL, options);		if (rectxt == NULL)		    xmlFreeParserCtxt(ctxt);	    }#ifdef HAVE_SYS_MMAN_H	} else if (memory) {	    int fd;	    struct stat info;	    const char *base;	    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;	    if (rectxt == NULL)		doc = xmlReadMemory((char *) base, info.st_size,		                    filename, NULL, options);	    else		doc = xmlCtxtReadMemory(rectxt, (char *) base, info.st_size,			                filename, NULL, options);	        	    munmap((char *) base, info.st_size);#endif#ifdef LIBXML_VALID_ENABLED	} else if (valid) {	    xmlParserCtxtPtr ctxt = NULL;	    if (rectxt == NULL)		ctxt = xmlNewParserCtxt();	    else	        ctxt = rectxt;	    if (ctxt == NULL) {	      	        doc = NULL;	    } else {		doc = xmlCtxtReadFile(ctxt, filename, NULL, options);		if (ctxt->valid == 0)		    progresult = 4;		if (rectxt == NULL)		    xmlFreeParserCtxt(ctxt);	    }#endif /* LIBXML_VALID_ENABLED */	} else {	    if (rectxt != NULL)	        doc = xmlCtxtReadFile(rectxt, filename, NULL, options);	    else		doc = xmlReadFile(filename, NULL, options);	}    }    /*     * If we don't have a document we might as well give up.  Do we     * want an error message here?  <sven@zen.org> */    if (doc == NULL) {	progresult = 1;	return;

⌨️ 快捷键说明

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