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

📄 debugxml.c

📁 Vovida 社区开源的 SIP 协议源码
💻 C
📖 第 1 页 / 共 4 页
字号:
    }}void xmlDebugDumpAttr(FILE *output, xmlAttrPtr attr, int depth) {    int i;    char shift[100];    for (i = 0;((i < depth) && (i < 25));i++)        shift[2 * i] = shift[2 * i + 1] = ' ';    shift[2 * i] = shift[2 * i + 1] = 0;    fprintf(output, shift);    fprintf(output, "ATTRIBUTE %s\n", attr->name);    if (attr->children != NULL)         xmlDebugDumpNodeList(output, attr->children, depth + 1);    /*     * Do a bit of checking     */    if (attr->parent == NULL)	fprintf(output, "PBM: Attr has no parent\n");    if (attr->doc == NULL)	fprintf(output, "PBM: Attr has no doc\n");    if ((attr->parent != NULL) && (attr->doc != attr->parent->doc))	fprintf(output, "PBM: Attr doc differs from parent's one\n");    if (attr->prev == NULL) {	if ((attr->parent != NULL) && (attr->parent->properties != attr))	    fprintf(output, "PBM: Attr has no prev and not first of list\n");    } else {	if (attr->prev->next != attr)	    fprintf(output, "PBM: Attr prev->next : back link wrong\n");    }    if (attr->next != NULL) {	if (attr->next->prev != attr)	    fprintf(output, "PBM: Attr next->prev : forward link wrong\n");    }}void xmlDebugDumpAttrList(FILE *output, xmlAttrPtr attr, int depth) {    while (attr != NULL) {        xmlDebugDumpAttr(output, attr, depth);	attr = attr->next;    }}void xmlDebugDumpOneNode(FILE *output, xmlNodePtr node, int depth) {    int i;    char shift[100];    for (i = 0;((i < depth) && (i < 25));i++)        shift[2 * i] = shift[2 * i + 1] = ' ';    shift[2 * i] = shift[2 * i + 1] = 0;    switch (node->type) {	case XML_ELEMENT_NODE:	    fprintf(output, shift);	    fprintf(output, "ELEMENT ");	    if (node->ns != NULL)	        fprintf(output, "%s:%s\n", node->ns->prefix, node->name);	    else	        fprintf(output, "%s\n", node->name);	    break;	case XML_ATTRIBUTE_NODE:	    fprintf(output, shift);	    fprintf(output, "Error, ATTRIBUTE found here\n");	    break;	case XML_TEXT_NODE:	    fprintf(output, shift);	    fprintf(output, "TEXT\n");	    break;	case XML_CDATA_SECTION_NODE:	    fprintf(output, shift);	    fprintf(output, "CDATA_SECTION\n");	    break;	case XML_ENTITY_REF_NODE:	    fprintf(output, shift);	    fprintf(output, "ENTITY_REF(%s)\n", node->name);	    break;	case XML_ENTITY_NODE:	    fprintf(output, shift);	    fprintf(output, "ENTITY\n");	    break;	case XML_PI_NODE:	    fprintf(output, shift);	    fprintf(output, "PI %s\n", node->name);	    break;	case XML_COMMENT_NODE:	    fprintf(output, shift);	    fprintf(output, "COMMENT\n");	    break;	case XML_DOCUMENT_NODE:	case XML_HTML_DOCUMENT_NODE:	    fprintf(output, shift);	    fprintf(output, "Error, DOCUMENT found here\n");	    break;	case XML_DOCUMENT_TYPE_NODE:	    fprintf(output, shift);	    fprintf(output, "DOCUMENT_TYPE\n");	    break;	case XML_DOCUMENT_FRAG_NODE:	    fprintf(output, shift);	    fprintf(output, "DOCUMENT_FRAG\n");	    break;	case XML_NOTATION_NODE:	    fprintf(output, "NOTATION\n");	    break;	case XML_DTD_NODE:	    xmlDebugDumpDtd(output, (xmlDtdPtr) node, depth);	    return;	case XML_ELEMENT_DECL:	    xmlDebugDumpElemDecl(output, (xmlElementPtr) node, depth);	    return;	case XML_ATTRIBUTE_DECL:	    xmlDebugDumpAttrDecl(output, (xmlAttributePtr) node, depth);	    return;        case XML_ENTITY_DECL:	    xmlDebugDumpEntityDecl(output, (xmlEntityPtr) node, depth);	    return;	default:	    fprintf(output, shift);	    fprintf(output, "NODE_%d\n", node->type);    }    if (node->doc == NULL) {        fprintf(output, shift);	fprintf(output, "doc == NULL !!!\n");    }    if (node->nsDef != NULL)         xmlDebugDumpNamespaceList(output, node->nsDef, depth + 1);    if (node->properties != NULL)	xmlDebugDumpAttrList(output, node->properties, depth + 1);    if (node->type != XML_ENTITY_REF_NODE) {	if (node->content != NULL) {	    fprintf(output, shift);	    fprintf(output, "content=");#ifndef XML_USE_BUFFER_CONTENT	    	    xmlDebugDumpString(output, node->content);#else	    xmlDebugDumpString(output, xmlBufferContent(node->content));#endif	    fprintf(output, "\n");	}    } else {        xmlEntityPtr ent;	ent = xmlGetDocEntity(node->doc, node->name);	if (ent != NULL)	    xmlDebugDumpEntity(output, ent, depth + 1);    }    /*     * Do a bit of checking     */    if (node->parent == NULL)	fprintf(output, "PBM: Node has no parent\n");    if (node->doc == NULL)	fprintf(output, "PBM: Node has no doc\n");    if ((node->parent != NULL) && (node->doc != node->parent->doc))	fprintf(output, "PBM: Node doc differs from parent's one\n");    if (node->prev == NULL) {	if ((node->parent != NULL) && (node->parent->children != node))	    fprintf(output, "PBM: Node has no prev and not first of list\n");    } else {	if (node->prev->next != node)	    fprintf(output, "PBM: Node prev->next : back link wrong\n");    }    if (node->next == NULL) {	if ((node->parent != NULL) && (node->parent->last != node))	    fprintf(output, "PBM: Node has no next and not last of list\n");    } else {	if (node->next->prev != node)	    fprintf(output, "PBM: Node next->prev : forward link wrong\n");    }}void xmlDebugDumpNode(FILE *output, xmlNodePtr node, int depth) {    xmlDebugDumpOneNode(output, node, depth);    if (node->children != NULL)	xmlDebugDumpNodeList(output, node->children, depth + 1);}void xmlDebugDumpNodeList(FILE *output, xmlNodePtr node, int depth) {    while (node != NULL) {        xmlDebugDumpNode(output, node, depth);	node = node->next;    }}void xmlDebugDumpDocumentHead(FILE *output, xmlDocPtr doc) {    if (output == NULL) output = stdout;    if (doc == NULL) {        fprintf(output, "DOCUMENT == NULL !\n");	return;    }    switch (doc->type) {	case XML_ELEMENT_NODE:	    fprintf(output, "Error, ELEMENT found here ");	    break;	case XML_ATTRIBUTE_NODE:	    fprintf(output, "Error, ATTRIBUTE found here\n");	    break;	case XML_TEXT_NODE:	    fprintf(output, "Error, TEXT\n");	    break;	case XML_CDATA_SECTION_NODE:	    fprintf(output, "Error, CDATA_SECTION\n");	    break;	case XML_ENTITY_REF_NODE:	    fprintf(output, "Error, ENTITY_REF\n");	    break;	case XML_ENTITY_NODE:	    fprintf(output, "Error, ENTITY\n");	    break;	case XML_PI_NODE:	    fprintf(output, "Error, PI\n");	    break;	case XML_COMMENT_NODE:	    fprintf(output, "Error, COMMENT\n");	    break;	case XML_DOCUMENT_NODE:	    fprintf(output, "DOCUMENT\n");	    break;	case XML_HTML_DOCUMENT_NODE:	    fprintf(output, "HTML DOCUMENT\n");	    break;	case XML_DOCUMENT_TYPE_NODE:	    fprintf(output, "Error, DOCUMENT_TYPE\n");	    break;	case XML_DOCUMENT_FRAG_NODE:	    fprintf(output, "Error, DOCUMENT_FRAG\n");	    break;	case XML_NOTATION_NODE:	    fprintf(output, "Error, NOTATION\n");	    break;	default:	    fprintf(output, "NODE_%d\n", doc->type);    }    if (doc->name != NULL) {	fprintf(output, "name=");        xmlDebugDumpString(output, BAD_CAST doc->name);	fprintf(output, "\n");    }    if (doc->version != NULL) {	fprintf(output, "version=");        xmlDebugDumpString(output, doc->version);	fprintf(output, "\n");    }    if (doc->encoding != NULL) {	fprintf(output, "encoding=");        xmlDebugDumpString(output, doc->encoding);	fprintf(output, "\n");    }    if (doc->standalone)        fprintf(output, "standalone=true\n");    if (doc->oldNs != NULL)         xmlDebugDumpNamespaceList(output, doc->oldNs, 0);}void xmlDebugDumpDocument(FILE *output, xmlDocPtr doc) {    if (output == NULL) output = stdout;    if (doc == NULL) {        fprintf(output, "DOCUMENT == NULL !\n");	return;    }    xmlDebugDumpDocumentHead(output, doc);    if (((doc->type == XML_DOCUMENT_NODE) ||         (doc->type == XML_HTML_DOCUMENT_NODE)) &&        (doc->children != NULL))        xmlDebugDumpNodeList(output, doc->children, 1);}    void xmlDebugDumpEntities(FILE *output, xmlDocPtr doc) {    int i;    xmlEntityPtr cur;    if (output == NULL) output = stdout;    if (doc == NULL) {        fprintf(output, "DOCUMENT == NULL !\n");	return;    }    switch (doc->type) {	case XML_ELEMENT_NODE:	    fprintf(output, "Error, ELEMENT found here ");	    break;	case XML_ATTRIBUTE_NODE:	    fprintf(output, "Error, ATTRIBUTE found here\n");	    break;	case XML_TEXT_NODE:	    fprintf(output, "Error, TEXT\n");	    break;	case XML_CDATA_SECTION_NODE:	    fprintf(output, "Error, CDATA_SECTION\n");	    break;	case XML_ENTITY_REF_NODE:	    fprintf(output, "Error, ENTITY_REF\n");	    break;	case XML_ENTITY_NODE:	    fprintf(output, "Error, ENTITY\n");	    break;	case XML_PI_NODE:	    fprintf(output, "Error, PI\n");	    break;	case XML_COMMENT_NODE:	    fprintf(output, "Error, COMMENT\n");	    break;	case XML_DOCUMENT_NODE:	    fprintf(output, "DOCUMENT\n");	    break;	case XML_HTML_DOCUMENT_NODE:	    fprintf(output, "HTML DOCUMENT\n");	    break;	case XML_DOCUMENT_TYPE_NODE:	    fprintf(output, "Error, DOCUMENT_TYPE\n");	    break;	case XML_DOCUMENT_FRAG_NODE:	    fprintf(output, "Error, DOCUMENT_FRAG\n");	    break;	case XML_NOTATION_NODE:	    fprintf(output, "Error, NOTATION\n");	    break;	default:	    fprintf(output, "NODE_%d\n", doc->type);    }    if ((doc->intSubset != NULL) && (doc->intSubset->entities != NULL)) {        xmlEntitiesTablePtr table = (xmlEntitiesTablePtr) 	                            doc->intSubset->entities;	fprintf(output, "Entities in internal subset\n");	for (i = 0;i < table->nb_entities;i++) {	    cur = table->table[i];	    fprintf(output, "%d : %s : ", i, cur->name);	    switch (cur->etype) {		case XML_INTERNAL_GENERAL_ENTITY:		    fprintf(output, "INTERNAL GENERAL, ");		    break;		case XML_EXTERNAL_GENERAL_PARSED_ENTITY:		    fprintf(output, "EXTERNAL PARSED, ");		    break;		case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:		    fprintf(output, "EXTERNAL UNPARSED, ");		    break;		case XML_INTERNAL_PARAMETER_ENTITY:		    fprintf(output, "INTERNAL PARAMETER, ");		    break;		case XML_EXTERNAL_PARAMETER_ENTITY:		    fprintf(output, "EXTERNAL PARAMETER, ");		    break;		default:		    fprintf(output, "UNKNOWN TYPE %d",			    cur->etype);	    }	    if (cur->ExternalID != NULL) 	        fprintf(output, "ID \"%s\"", cur->ExternalID);	    if (cur->SystemID != NULL)	        fprintf(output, "SYSTEM \"%s\"", cur->SystemID);	    if (cur->orig != NULL)	        fprintf(output, "\n orig \"%s\"", cur->orig);	    if (cur->content != NULL)	        fprintf(output, "\n content \"%s\"", cur->content);	    fprintf(output, "\n");		}    } else	fprintf(output, "No entities in internal subset\n");    if ((doc->extSubset != NULL) && (doc->extSubset->entities != NULL)) {        xmlEntitiesTablePtr table = (xmlEntitiesTablePtr) 	                            doc->extSubset->entities;	fprintf(output, "Entities in external subset\n");	for (i = 0;i < table->nb_entities;i++) {	    cur = table->table[i];	    fprintf(output, "%d : %s : ", i, cur->name);	    switch (cur->etype) {		case XML_INTERNAL_GENERAL_ENTITY:		    fprintf(output, "INTERNAL GENERAL, ");		    break;		case XML_EXTERNAL_GENERAL_PARSED_ENTITY:		    fprintf(output, "EXTERNAL PARSED, ");		    break;		case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:		    fprintf(output, "EXTERNAL UNPARSED, ");		    break;		case XML_INTERNAL_PARAMETER_ENTITY:		    fprintf(output, "INTERNAL PARAMETER, ");		    break;		case XML_EXTERNAL_PARAMETER_ENTITY:		    fprintf(output, "EXTERNAL PARAMETER, ");		    break;		default:		    fprintf(output, "UNKNOWN TYPE %d",			    cur->etype);	    }	    if (cur->ExternalID != NULL) 	        fprintf(output, "ID \"%s\"", cur->ExternalID);	    if (cur->SystemID != NULL)	        fprintf(output, "SYSTEM \"%s\"", cur->SystemID);	    if (cur->orig != NULL)	        fprintf(output, "\n orig \"%s\"", cur->orig);	    if (cur->content != NULL)	        fprintf(output, "\n content \"%s\"", cur->content);	    fprintf(output, "\n");		}    } else	fprintf(output, "No entities in external subset\n");}static int xmlLsCountNode(xmlNodePtr node) {    int ret = 0;    xmlNodePtr list = NULL;    switch (node->type) {	case XML_ELEMENT_NODE:	    list = node->children;	    break;	case XML_DOCUMENT_NODE:	case XML_HTML_DOCUMENT_NODE:	    list = ((xmlDocPtr) node)->children;	    break;	case XML_ATTRIBUTE_NODE:	    list = ((xmlAttrPtr) node)->children;	    break;	case XML_TEXT_NODE:	case XML_CDATA_SECTION_NODE:	case XML_PI_NODE:	case XML_COMMENT_NODE:	    if (node->content != NULL) {#ifndef XML_USE_BUFFER_CONTENT	    

⌨️ 快捷键说明

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