Example #1
0
void test_xmlgen(void)
{
    
    XG_HANDLE  hd;
    xg_attr_struct attrlist[2];
    char *data = NULL, *dtd=NULL;
    kal_wchar resultname[128];
    int  ret, len, driver;

    driver = FS_GetDrive(FS_DRIVE_V_NORMAL, 1, FS_DRIVE_I_SYSTEM);
    csd_wsprintf((kal_uint16*)resultname, "%c:\\xmlsample.txt",driver);    

    hd = xml_new_generator((kal_char*)resultname, 0);
    xml_generate_xmldecl(hd, 0, XML_ENCODING_UTF8);
    xml_generate_doctypedecl(hd, "bookshop", XG_DOCTYPE_SYSTEM, "bookshop.dtd");
    dtd = "<!ELEMENT greeting (#PCDATA)>";
    len = strlen(dtd);
//    xml_generate_doctypedecl_ex(hd, "bookshop", dtd, len);
  
    ret = xml_generate_stag(hd, "bookshop", NULL, 0);  /*  to generate:  <bookshop> */
 
    /* to generate: <book1>this is a book of computer</book1> */

    data = "test data";
    
    ret = xml_generate_inline_element(hd, "book1", data, strlen(data)); 
    

    ret = xml_generate_stag(hd, "contact", NULL, 0);
    
    /* to generate: <address street="Xi Dan Street"/> */
    attrlist[0].attrname = "street";
    attrlist[0].attrvalue = "Xi Dan Street";
    attrlist[1].attrname = "code";
    attrlist[1].attrvalue = "100022";
    ret = xml_generate_empty_element(hd, "address", attrlist, 2);
  
    /* to generate: <email>[![CDATA[[email protected]]]></email> */
    ret = xml_generate_stag(hd, "email", NULL, 0);
    data = " [email protected]";
    ret = xml_generate_cdata(hd, data, strlen(data));
   
    ret = xml_generate_etag(hd, "email");

    ret = xml_generate_stag(hd, "msn", NULL, 0);
    data = "*****@*****.**";
    ret = xml_generate_data(hd, data, strlen(data));
    ret = xml_generate_etag(hd, "msn");
  
    /* to generate: </contact> */
    ret = xml_generate_etag(hd, "contact");
    
    /* to generate: </sample> */
    ret = xml_generate_etag(hd, "bookshop");
  
    xml_close_generator(hd);
}
Example #2
0
/*****************************************************************************
 * FUNCTION
 *  xml_generate_inline_element
 * DESCRIPTION
 *  This function is for application to generate a whole element without child element
 *  and attribute, only content. just as following: <a> test </a>.
 * PARAMETERS
 *  hd          [IN]    handle of generator
 *  el          [IN]    element name
 *  data        [IN]    Filename or buffer with data. 
 *  datalen     [IN]    if with buffer, datalen is the length of buffer, 
 *                      if with file, datalen should be 0
 * RETURNS
 *      <0: means failed, returns error code;
 *      0 :  means succeed;
 *****************************************************************************/
kal_int32 xml_generate_inline_element(XG_HANDLE hd, const kal_char* el, kal_char* data, kal_uint32 datalen)
{
    kal_int32 ret;
    kal_uint32 len_read, len;
    FS_HANDLE fhandle = -1;
    kal_char tempbuf[TEMP_BUF_LEN];
    if ((ret = xml_generate_stag(hd, el, NULL, 0)) < 0)
    {
        return ret;
    }

	if (datalen == 0)
	{   
	    fhandle = FS_Open((WCHAR*)data, FS_READ_ONLY);
        if (fhandle < 0)
        {
            return XG_E_FAIL;
        }
        ret = FS_GetFileSize(fhandle, &len);
        if (ret < 0)
        {
            FS_Close(fhandle);
            return XG_E_FAIL;
        }       
		while ((ret = FS_Read(fhandle, tempbuf, TEMP_BUF_LEN-1, &len_read)) >= FS_NO_ERROR)
        {
        	if (len_read == 0)
            {
            	break;
            }
			if ((ret=xml_generate_converted_data(hd, tempbuf, len_read)) < 0)
			{
				 return ret;
			}
		}
		FS_Close(fhandle);
	}
	else
    {
    	if ((ret = xml_generate_converted_data(hd, data, datalen)) < 0)
    {
        return ret;
    }
	}

/*
    if ((ret = xml_generate_data(hd, data, datalen)) < 0)
    {
        return ret;
    }
    */
    return xml_generate_etag(hd, el);
    
}