4 #ifdef XMLTOOLS_DEBUG // standalone debugging
6 int main(int argc, char* argv[]) {
9 char* dtdfile = argv[2];
12 printf("\n%s\n", xmlDocToString(xmlParseEntity(file), 1));
16 xmlSubstituteEntitiesDefault(1);
17 xmlParserCtxtPtr ctxt = xmlNewParserCtxt();
18 doc = xmlCtxtReadFile(ctxt, file, NULL, XML_PARSE_NOENT | XML_PARSE_RECOVER | XML_PARSE_NOERROR | XML_PARSE_NOWARNING );
20 fprintf(stderr, "What we have so far:\n%s\n", xmlDocToString(doc, 1));
22 fprintf(stderr, "NO Doc\n");
28 if( (doc = xmlParseFile(file)) == NULL) {
29 fprintf(stderr, "\n ^-- Error parsing XML file %s\n", file);
35 /* process xincludes */
36 if( xmlXIncludeProcessFlags(doc, XML_PARSE_NOENT) < 0 ) {
37 fprintf(stderr, "\n ^-- Error processing XIncludes for file %s\n", file);
39 fprintf(stderr, "What we have so far:\n%s\n", xmlDocToString(doc, 1));
48 if(xmlReplaceDtd(doc, dtdfile) < 0) {
49 fprintf(stderr, "Error replacing DTD file with file %s\n", dtdfile);
56 xmlAddDocEntity(doc, "test", XML_INTERNAL_GENERAL_ENTITY, NULL, NULL, "Here is my test");
58 xmlSubstituteEntitiesDefault(1);
59 printf("---------------------------------\n%s\n", xmlDocToString(doc,1));
63 /* force DTD entity replacement */
64 doc = xmlProcessDtdEntities(doc);
67 char* xml = xmlDocToString(doc, 0);
69 fprintf(stderr, "%s\n", xml);
74 xmlCleanupCharEncodingHandlers();
82 xmlDocPtr xmlProcessDtdEntities(xmlDocPtr doc) {
83 char* xml = xmlDocToString(doc, 1);
85 xmlSubstituteEntitiesDefault(1);
86 xmlDocPtr d = xmlParseMemory(xml, strlen(xml));
92 int xmlReplaceDtd(xmlDocPtr doc, char* dtdfile) {
94 if(!doc || !dtdfile) return 0;
96 /* remove the original DTD */
97 if(doc->children && doc->children->type == XML_DTD_NODE) {
98 xmlNodePtr p = doc->children;
104 xmlDtdPtr dtd = xmlParseDTD(NULL, dtdfile);
107 fprintf(stderr, "Error parsing DTD file %s\n", dtdfile);
112 dtd->name = xmlStrdup((xmlChar*)"x");
113 doc->extSubset = dtd;
116 xmlNodePtr x = doc->children;
117 doc->children = (xmlNodePtr)dtd;
123 char* xmlDocToString(xmlDocPtr doc, int full) {
125 if(!doc) return NULL;
133 xmlDocDumpMemory(doc, &xmlbuf, &size);
134 xml = strdup((char*) (xmlbuf));
140 xmlBufferPtr xmlbuf = xmlBufferCreate();
141 xmlNodeDump( xmlbuf, doc, xmlDocGetRootElement(doc), 0, 0);
142 xml = strdup((char*) (xmlBufferContent(xmlbuf)));
143 xmlBufferFree(xmlbuf);