]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/apachemods/xmltools.c
c9f6c97f4422610dd84a76d503240582667046cb
[working/Evergreen.git] / Open-ILS / src / apachemods / xmltools.c
1 #include "xmltools.h"
2
3 xmlDocPtr xmlProcessDtdEntities(xmlDocPtr doc) {
4         char* xml = xmlDocToString(doc, 1);
5         xmlFreeDoc(doc);
6         xmlSubstituteEntitiesDefault(1);
7         xmlDocPtr d = xmlParseMemory(xml, strlen(xml));
8         free(xml);
9         return d;
10 }
11
12
13 int xmlReplaceDtd(xmlDocPtr doc, char* dtdfile) {
14
15         if(!doc || !dtdfile) return 0;
16
17         /* remove the original DTD */
18         if(doc->children && doc->children->type ==  XML_DTD_NODE) {
19                 xmlNodePtr p = doc->children;
20                 xmlUnlinkNode(p);
21                 xmlFreeNode(p);
22         }
23
24
25         xmlDtdPtr dtd = xmlParseDTD(NULL, dtdfile);
26
27         if(!dtd) {
28                 fprintf(stderr, "Error parsing DTD file %s\n", dtdfile);
29                 fflush(stderr);
30                 return -1;
31         }
32
33         dtd->name = xmlStrdup((xmlChar*)"x");
34         doc->extSubset = dtd;   
35         dtd->doc = doc;
36         dtd->parent = doc;
37         xmlNodePtr x = doc->children;
38         doc->children = (xmlNodePtr)dtd;
39         dtd->next = x;
40
41         return 1;
42 }
43
44 char* xmlDocToString(xmlDocPtr doc, int full) {
45
46         char* xml;
47
48         if(full) {
49
50                 xmlChar* xmlbuf;
51                 int size;
52                 xmlDocDumpMemory(doc, &xmlbuf, &size);
53                 xml = strdup((char*) (xmlbuf));
54                 xmlFree(xmlbuf);
55                 return xml;
56
57         } else {
58
59                 xmlBufferPtr xmlbuf = xmlBufferCreate();
60                 xmlNodeDump( xmlbuf, doc, xmlDocGetRootElement(doc), 0, 0);
61                 xml = strdup((char*) (xmlBufferContent(xmlbuf)));
62                 xmlBufferFree(xmlbuf);
63                 return xml;
64
65         }
66
67 }