3 xmlDocPtr xmlProcessDtdEntities(xmlDocPtr doc) {
4 char* xml = xmlDocToString(doc, 1);
6 xmlSubstituteEntitiesDefault(1);
7 xmlDocPtr d = xmlParseMemory(xml, strlen(xml));
13 int xmlReplaceDtd(xmlDocPtr doc, char* dtdfile) {
15 if(!doc || !dtdfile) return 0;
17 /* remove the original DTD */
18 if(doc->children && doc->children->type == XML_DTD_NODE) {
19 xmlNodePtr p = doc->children;
25 xmlDtdPtr dtd = xmlParseDTD(NULL, dtdfile);
28 fprintf(stderr, "Error parsing DTD file %s\n", dtdfile);
33 dtd->name = xmlStrdup((xmlChar*)"x");
37 xmlNodePtr x = doc->children;
38 doc->children = (xmlNodePtr)dtd;
44 char* xmlDocToString(xmlDocPtr doc, int full) {
52 xmlDocDumpMemory(doc, &xmlbuf, &size);
53 xml = strdup((char*) (xmlbuf));
59 xmlBufferPtr xmlbuf = xmlBufferCreate();
60 xmlNodeDump( xmlbuf, doc, xmlDocGetRootElement(doc), 0, 0);
61 xml = strdup((char*) (xmlBufferContent(xmlbuf)));
62 xmlBufferFree(xmlbuf);