📄 parser.c
字号:
schannel = ctxt->sax->serror; } __xmlRaiseError(schannel, ctxt->vctxt.error, ctxt->vctxt.userData, ctxt, NULL, XML_FROM_DTD, error, XML_ERR_ERROR, NULL, 0, (const char *) str1, NULL, NULL, 0, 0, msg, (const char *) str1); if (ctxt != NULL) { ctxt->valid = 0; }}/** * xmlFatalErrMsgInt: * @ctxt: an XML parser context * @error: the error number * @msg: the error message * @val: an integer value * * Handle a fatal parser error, i.e. violating Well-Formedness constraints */static voidxmlFatalErrMsgInt(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *msg, int val){ if ((ctxt != NULL) && (ctxt->disableSAX != 0) && (ctxt->instate == XML_PARSER_EOF)) return; if (ctxt != NULL) ctxt->errNo = error; __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL, NULL, 0, NULL, NULL, NULL, val, 0, msg, val); if (ctxt != NULL) { ctxt->wellFormed = 0; if (ctxt->recovery == 0) ctxt->disableSAX = 1; }}/** * xmlFatalErrMsgStrIntStr: * @ctxt: an XML parser context * @error: the error number * @msg: the error message * @str1: an string info * @val: an integer value * @str2: an string info * * Handle a fatal parser error, i.e. violating Well-Formedness constraints */static voidxmlFatalErrMsgStrIntStr(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *msg, const xmlChar *str1, int val, const xmlChar *str2){ if ((ctxt != NULL) && (ctxt->disableSAX != 0) && (ctxt->instate == XML_PARSER_EOF)) return; if (ctxt != NULL) ctxt->errNo = error; __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL, NULL, 0, (const char *) str1, (const char *) str2, NULL, val, 0, msg, str1, val, str2); if (ctxt != NULL) { ctxt->wellFormed = 0; if (ctxt->recovery == 0) ctxt->disableSAX = 1; }}/** * xmlFatalErrMsgStr: * @ctxt: an XML parser context * @error: the error number * @msg: the error message * @val: a string value * * Handle a fatal parser error, i.e. violating Well-Formedness constraints */static voidxmlFatalErrMsgStr(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *msg, const xmlChar * val){ if ((ctxt != NULL) && (ctxt->disableSAX != 0) && (ctxt->instate == XML_PARSER_EOF)) return; if (ctxt != NULL) ctxt->errNo = error; __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL, NULL, 0, (const char *) val, NULL, NULL, 0, 0, msg, val); if (ctxt != NULL) { ctxt->wellFormed = 0; if (ctxt->recovery == 0) ctxt->disableSAX = 1; }}/** * xmlErrMsgStr: * @ctxt: an XML parser context * @error: the error number * @msg: the error message * @val: a string value * * Handle a non fatal parser error */static voidxmlErrMsgStr(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *msg, const xmlChar * val){ if ((ctxt != NULL) && (ctxt->disableSAX != 0) && (ctxt->instate == XML_PARSER_EOF)) return; if (ctxt != NULL) ctxt->errNo = error; __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_ERROR, NULL, 0, (const char *) val, NULL, NULL, 0, 0, msg, val);}/** * xmlNsErr: * @ctxt: an XML parser context * @error: the error number * @msg: the message * @info1: extra information string * @info2: extra information string * * Handle a fatal parser error, i.e. violating Well-Formedness constraints */static voidxmlNsErr(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *msg, const xmlChar * info1, const xmlChar * info2, const xmlChar * info3){ if ((ctxt != NULL) && (ctxt->disableSAX != 0) && (ctxt->instate == XML_PARSER_EOF)) return; if (ctxt != NULL) ctxt->errNo = error; __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error, XML_ERR_ERROR, NULL, 0, (const char *) info1, (const char *) info2, (const char *) info3, 0, 0, msg, info1, info2, info3); if (ctxt != NULL) ctxt->nsWellFormed = 0;}/************************************************************************ * * * Library wide options * * * ************************************************************************//** * xmlHasFeature: * @feature: the feature to be examined * * Examines if the library has been compiled with a given feature. * * Returns a non-zero value if the feature exist, otherwise zero. * Returns zero (0) if the feature does not exist or an unknown * unknown feature is requested, non-zero otherwise. */intxmlHasFeature(xmlFeature feature){ switch (feature) { case XML_WITH_THREAD:#ifdef LIBXML_THREAD_ENABLED return(1);#else return(0);#endif case XML_WITH_TREE:#ifdef LIBXML_TREE_ENABLED return(1);#else return(0);#endif case XML_WITH_OUTPUT:#ifdef LIBXML_OUTPUT_ENABLED return(1);#else return(0);#endif case XML_WITH_PUSH:#ifdef LIBXML_PUSH_ENABLED return(1);#else return(0);#endif case XML_WITH_READER:#ifdef LIBXML_READER_ENABLED return(1);#else return(0);#endif case XML_WITH_PATTERN:#ifdef LIBXML_PATTERN_ENABLED return(1);#else return(0);#endif case XML_WITH_WRITER:#ifdef LIBXML_WRITER_ENABLED return(1);#else return(0);#endif case XML_WITH_SAX1:#ifdef LIBXML_SAX1_ENABLED return(1);#else return(0);#endif case XML_WITH_FTP:#ifdef LIBXML_FTP_ENABLED return(1);#else return(0);#endif case XML_WITH_HTTP:#ifdef LIBXML_HTTP_ENABLED return(1);#else return(0);#endif case XML_WITH_VALID:#ifdef LIBXML_VALID_ENABLED return(1);#else return(0);#endif case XML_WITH_HTML:#ifdef LIBXML_HTML_ENABLED return(1);#else return(0);#endif case XML_WITH_LEGACY:#ifdef LIBXML_LEGACY_ENABLED return(1);#else return(0);#endif case XML_WITH_C14N:#ifdef LIBXML_C14N_ENABLED return(1);#else return(0);#endif case XML_WITH_CATALOG:#ifdef LIBXML_CATALOG_ENABLED return(1);#else return(0);#endif case XML_WITH_XPATH:#ifdef LIBXML_XPATH_ENABLED return(1);#else return(0);#endif case XML_WITH_XPTR:#ifdef LIBXML_XPTR_ENABLED return(1);#else return(0);#endif case XML_WITH_XINCLUDE:#ifdef LIBXML_XINCLUDE_ENABLED return(1);#else return(0);#endif case XML_WITH_ICONV:#ifdef LIBXML_ICONV_ENABLED return(1);#else return(0);#endif case XML_WITH_ISO8859X:#ifdef LIBXML_ISO8859X_ENABLED return(1);#else return(0);#endif case XML_WITH_UNICODE:#ifdef LIBXML_UNICODE_ENABLED return(1);#else return(0);#endif case XML_WITH_REGEXP:#ifdef LIBXML_REGEXP_ENABLED return(1);#else return(0);#endif case XML_WITH_AUTOMATA:#ifdef LIBXML_AUTOMATA_ENABLED return(1);#else return(0);#endif case XML_WITH_EXPR:#ifdef LIBXML_EXPR_ENABLED return(1);#else return(0);#endif case XML_WITH_SCHEMAS:#ifdef LIBXML_SCHEMAS_ENABLED return(1);#else return(0);#endif case XML_WITH_SCHEMATRON:#ifdef LIBXML_SCHEMATRON_ENABLED return(1);#else return(0);#endif case XML_WITH_MODULES:#ifdef LIBXML_MODULES_ENABLED return(1);#else return(0);#endif case XML_WITH_DEBUG:#ifdef LIBXML_DEBUG_ENABLED return(1);#else return(0);#endif case XML_WITH_DEBUG_MEM:#ifdef DEBUG_MEMORY_LOCATION return(1);#else return(0);#endif case XML_WITH_DEBUG_RUN:#ifdef LIBXML_DEBUG_RUNTIME return(1);#else return(0);#endif case XML_WITH_ZLIB:#ifdef LIBXML_ZLIB_ENABLED return(1);#else return(0);#endif default: break; } return(0);}/************************************************************************ * * * SAX2 defaulted attributes handling * * * ************************************************************************//** * xmlDetectSAX2: * @ctxt: an XML parser context * * Do the SAX2 detection and specific intialization */static voidxmlDetectSAX2(xmlParserCtxtPtr ctxt) { if (ctxt == NULL) return;#ifdef LIBXML_SAX1_ENABLED if ((ctxt->sax) && (ctxt->sax->initialized == XML_SAX2_MAGIC) && ((ctxt->sax->startElementNs != NULL) || (ctxt->sax->endElementNs != NULL))) ctxt->sax2 = 1;#else ctxt->sax2 = 1;#endif /* LIBXML_SAX1_ENABLED */ ctxt->str_xml = xmlDictLookup(ctxt->dict, BAD_CAST "xml", 3); ctxt->str_xmlns = xmlDictLookup(ctxt->dict, BAD_CAST "xmlns", 5); ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36); if ((ctxt->str_xml==NULL) || (ctxt->str_xmlns==NULL) || (ctxt->str_xml_ns == NULL)) { xmlErrMemory(ctxt, NULL); }}typedef struct _xmlDefAttrs xmlDefAttrs;typedef xmlDefAttrs *xmlDefAttrsPtr;struct _xmlDefAttrs { int nbAttrs; /* number of defaulted attributes on that element */ int maxAttrs; /* the size of the array */ const xmlChar *values[4]; /* array of localname/prefix/values */};/** * xmlAddDefAttrs: * @ctxt: an XML parser context * @fullname: the element fullname * @fullattr: the attribute fullname * @value: the attribute value * * Add a defaulted attribute for an element */static voidxmlAddDefAttrs(xmlParserCtxtPtr ctxt, const xmlChar *fullname, const xmlChar *fullattr, const xmlChar *value) { xmlDefAttrsPtr defaults; int len; const xmlChar *name; const xmlChar *prefix; if (ctxt->attsDefault == NULL) { ctxt->attsDefault = xmlHashCreateDict(10, ctxt->dict); if (ctxt->attsDefault == NULL) goto mem_error; } /* * split the element name into prefix:localname , the string found * are within the DTD and then not associated to namespace names. */ name = xmlSplitQName3(fullname, &len); if (name == NULL) { name = xmlDictLookup(ctxt->dict, fullname, -1); prefix = NULL; } else { name = xmlDictLookup(ctxt->dict, name, -1); prefix = xmlDictLookup(ctxt->dict, fullname, len); } /* * make sure there is some storage */ defaults = xmlHashLookup2(ctxt->attsDefault, name, prefix); if (defaults == NULL) { defaults = (xmlDefAttrsPtr) xmlMalloc(sizeof(xmlDefAttrs) + (4 * 4) * sizeof(const xmlChar *)); if (defaults == NULL) goto mem_error;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -