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); }
/***************************************************************************** * 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); }