1 <![CDATA[ 2 #include <string.h> 3 #include <libxml/parser.h> 4 5 6 unsigned char* 7 convert (unsigned char *in, char *encoding) 8 { 9 unsigned char *out; 10 int ret,size,out_size,temp; 11 xmlCharEncodingHandlerPtr handler; 12 13 size = (int)strlen(in)+1; 14 out_size = size*2-1; 15 out = malloc((size_t)out_size); 16 17 if (out) { 18 handler = xmlFindCharEncodingHandler(encoding); 19 20 if (!handler) { 21 free(out); 22 out = NULL; 23 } 24 } 25 if (out) { 26 temp=size-1; 27 ret = handler->input(out, &out_size, in, &temp); 28 if (ret || temp-size+1) { 29 if (ret) { 30 printf("conversion wasn't successful.\n"); 31 } else { 32 printf("conversion wasn't successful. converted: %i octets.\n",temp); 33 } 34 free(out); 35 out = NULL; 36 } else { 37 out = realloc(out,out_size+1); 38 out[out_size]=0; /*null terminating out*/ 39 40 } 41 } else { 42 printf("no mem\n"); 43 } 44 return (out); 45 } 46 47 48 int 49 main(int argc, char **argv) { 50 51 unsigned char *content, *out; 52 xmlDocPtr doc; 53 xmlNodePtr rootnode; 54 char *encoding = "ISO-8859-1"; 55 56 57 if (argc <= 1) { 58 printf("Usage: %s content\n", argv[0]); 59 return(0); 60 } 61 62 content = argv[1]; 63 64 out = convert(content, encoding); 65 66 doc = xmlNewDoc ("1.0"); 67 rootnode = xmlNewDocNode(doc, NULL, (const xmlChar*)"root", out); 68 xmlDocSetRootElement(doc, rootnode); 69 70 xmlSaveFormatFileEnc("-", doc, encoding, 1); 71 return (1); 72 } 73 ]]> 74