4 #ifdef XMLTOOLS_DEBUG // standalone debugging
6 int main(int argc, char* argv[]) {
9 char* dtdfile = argv[2];
15 xmlSubstituteEntitiesDefault(0);
16 xmlParserCtxtPtr ctxt = xmlNewParserCtxt();
17 doc = xmlCtxtReadFile(ctxt, file, NULL, XML_PARSE_NOENT | XML_PARSE_RECOVER | XML_PARSE_XINCLUDE | XML_PARSE_NOERROR | XML_PARSE_NOWARNING );
19 fprintf(stderr, "What we have so far:\n%s\n", xmlDocToString(doc, 1));
21 fprintf(stderr, "NO Doc\n");
29 if( (doc = xmlParseFile(file)) == NULL) {
30 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));
46 if(xmlReplaceDtd(doc, dtdfile) < 0) {
47 fprintf(stderr, "Error replacing DTD file with file %s\n", dtdfile);
52 /* force DTD entity replacement */
53 doc = xmlProcessDtdEntities(doc);
56 char* xml = xmlDocToString(doc, 0);
58 fprintf(stderr, "%s\n", xml);
64 xmlCleanupCharEncodingHandlers();
72 xmlDocPtr xmlProcessDtdEntities(xmlDocPtr doc) {
73 char* xml = xmlDocToString(doc, 1);
75 xmlSubstituteEntitiesDefault(1);
76 xmlDocPtr d = xmlParseMemory(xml, strlen(xml));
82 int xmlReplaceDtd(xmlDocPtr doc, char* dtdfile) {
84 if(!doc || !dtdfile) return 0;
86 /* remove the original DTD */
87 if(doc->children && doc->children->type == XML_DTD_NODE) {
88 xmlNodePtr p = doc->children;
94 xmlDtdPtr dtd = xmlParseDTD(NULL, dtdfile);
97 fprintf(stderr, "Error parsing DTD file %s\n", dtdfile);
102 dtd->name = xmlStrdup((xmlChar*)"x");
103 doc->extSubset = dtd;
106 xmlNodePtr x = doc->children;
107 doc->children = (xmlNodePtr)dtd;
113 char* xmlDocToString(xmlDocPtr doc, int full) {
121 xmlDocDumpMemory(doc, &xmlbuf, &size);
122 xml = strdup((char*) (xmlbuf));
128 xmlBufferPtr xmlbuf = xmlBufferCreate();
129 xmlNodeDump( xmlbuf, doc, xmlDocGetRootElement(doc), 0, 0);
130 xml = strdup((char*) (xmlBufferContent(xmlbuf)));
131 xmlBufferFree(xmlbuf);