[xml] Newbie question about an example from the web site



Hello folks,

I’ve successfully built the examples from http://xmlsoft.org/tutorial/index.html, except the last one about 
encoding conversion.

I added printouts to the original code to help (see below) and get:

10:51:35 (250) menu@ - ~/libxml2-git > ./EncodingConversionExample foo
--> content = foo
--> size = 4
--> out_size = 7
--> temp = 3
--> temp-size+1 = 0
conversion wasn't successful.
--> out = (null)
<?xml version="1.0" encoding="ISO-8859-1"?>
<root/>

Thanks for your help!

JM

—

11:15:24 (251) menu@ - ~/libxml2-git > cat EncodingConversionExample.c
#include <string.h>
#include <libxml/parser.h>


unsigned char*
convert (unsigned char *in, char *encoding)
{
        unsigned char *out;
        int ret,size,out_size,temp;
        xmlCharEncodingHandlerPtr handler;

        size = (int)strlen(in)+1; 
        out_size = size*2-1; 
        out = malloc((size_t)out_size); 

        printf("--> size = %d\n", size);
        printf("--> out_size = %d\n", out_size);

        if (out) {
                handler = xmlFindCharEncodingHandler(encoding);
                
                if (!handler) {
                        printf("--> %s encoding handler not found\n", encoding);
                        free(out);
                        out = NULL;
                }
        }

        if (out) {
                temp=size-1;
                printf("--> temp = %d\n", temp);

                ret = handler->input(out, &out_size, in, &temp);

                if (ret || temp-size+1) {
                        printf("--> temp-size+1 = %d\n", temp-size+1);

                        if (ret) {
                                printf("conversion wasn't successful.\n");
                        } else {
                                printf("conversion wasn't successful. converted: %i octets.\n",temp);
                        }

                        free(out);
                        out = NULL;
                } else {
                        out = realloc(out,out_size+1); 
                        out[out_size]=0; /*null terminating out*/
                        
                }
        } else {
                printf("no mem\n");
        }
        return (out);
}       


int
main(int argc, char **argv) {

        unsigned char *content, *out;
        xmlDocPtr doc;
        xmlNodePtr rootnode;
        char *encoding = "ISO-8859-1";
        
                
        if (argc <= 1) {
                printf("Usage: %s content\n", argv[0]);
                return(0);
        }

        content = argv[1];
        printf("--> content = %s\n", content);

        out = convert(content, encoding);
        printf("--> out = %s\n", out);

        doc = xmlNewDoc ("1.0");
        rootnode = xmlNewDocNode(doc, NULL, (const xmlChar*)"root", out);
        xmlDocSetRootElement(doc, rootnode);

        xmlSaveFormatFileEnc("-", doc, encoding, 1);
        return (1);
}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]