00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00024 #include <stdio.h>
00025 #include <sys/time.h>
00026 #include <unistd.h>
00027 #include <ermanifest.h>
00028
00029 #define MAX_LEN 1024
00030 #define STROKE_LEN 2000
00031
00032 void dumparg(int argc, char *argv[])
00033 {
00034 int i = 0;
00035 fprintf(stderr, "argc %d\n", argc);
00036 for(i = 0; i < argc; ++i)
00037 fprintf(stderr, "argc %d: %s\n", i, argv[i]);
00038 }
00039
00040 void usage()
00041 {
00042 fprintf(stderr, "Usage:\n");
00043 fprintf(stderr, " <inputfilename> <outputfilename>\n");
00044 }
00045
00046 void testOpen(const char *pathname)
00047 {
00048 erManifest manifest;
00049
00050 ermXmlOpenFile(pathname, &manifest);
00051
00052 char data[MAX_LEN] = {0};
00053
00054
00055 fprintf(stderr, "test memory leak\n");
00056 int i = 0;
00057 for( ; i < 10000000; ++i)
00058 {
00059 ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Title", data, MAX_LEN);
00060 }
00061 fprintf(stderr, "\n\ntest done!!!!!!!\n\n");
00062 sleep(100);
00063 fprintf(stderr, "result: %s\n", data);
00064
00065 ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Description", data, MAX_LEN);
00066 fprintf(stderr, "result: %s\n", data);
00067
00068
00069 ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Date", data, MAX_LEN);
00070 fprintf(stderr, "result: %s\n", data);
00071
00072 ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Format", data, MAX_LEN);
00073 fprintf(stderr, "result: %s\n", data);
00074
00075 ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Identifier", data, MAX_LEN);
00076 fprintf(stderr, "result: %s\n", data);
00077
00078 ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Language", data, MAX_LEN);
00079 fprintf(stderr, "result: %s\n", data);
00080
00081 ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Type", data, MAX_LEN);
00082 fprintf(stderr, "result: %s\n", data);
00083
00084 ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Type", data, MAX_LEN);
00085 fprintf(stderr, "result: %s\n", data);
00086
00087
00088 ermXmlGetString(&manifest, "/package/metadata/y-metadata/FileSize", data, MAX_LEN);
00089 fprintf(stderr, "result: %s\n", data);
00090
00091 int itemSize = -1;
00092 ermXmlGetInt(&manifest, "/package/metadata/y-metadata/ItemSize", &itemSize);
00093 fprintf(stderr, "result: %d\n", itemSize);
00094
00095 ermXmlClose(&manifest);
00096 }
00097
00098
00099 void testWrite(const char *pathname)
00100 {
00101 erManifest manifest;
00102
00103 ermXmlOpenFile(pathname, &manifest);
00104
00105 char data[MAX_LEN] = {0};
00106
00107 char *des = "This is a demo test!这是一个中文测试";
00108 if (RET_OK == ermXmlSetString(&manifest, "/package/metadata/dc-metadata/Description", des))
00109 printf("set string ok!\n");
00110 else
00111 printf("set string failed!\n");
00112
00113 ermXmlGetString(&manifest, "/package/metadata/dc-metadata/Description", data, MAX_LEN);
00114 fprintf(stderr, "result: %s\n", data);
00115
00116 int itemSize = 4567890;
00117 ermXmlSetInt(&manifest, "/package/metadata/y-metadata/ItemSize", itemSize);
00118
00119 ermXmlNewString(&manifest, "/package/metadata/y-metadata", "a", "content of a");
00120 ermXmlNewString(&manifest, "/package/metadata/y-metadata/a", "b", "content of b");
00121 ermXmlNewString(&manifest, "/package/metadata/y-metadata/a/b", "c", "content of c");
00122 ermXmlNewString(&manifest, "/package/metadata/y-metadata/a/b/c", "d", "content of d");
00123 ermXmlNewInt(&manifest, "/package/metadata/y-metadata/a/b/c/d", "e", 987654);
00124
00125
00126
00127
00128 ermXmlGetAttributeString(&manifest, "/package/index/pagelist[1]/page", "url", data, MAX_LEN);
00129 fprintf(stderr, "result: %s\n", data);
00130 ermXmlGetAttributeString(&manifest, "/package/index/pagelist[2]/page", "url", data, MAX_LEN);
00131 fprintf(stderr, "result: %s\n", data);
00132 ermXmlGetAttributeString(&manifest, "/package/index/pagelist[3]/page", "url", data, MAX_LEN);
00133 fprintf(stderr, "result: %s\n", data);
00134
00135
00136 char *attr = "this is attribute test这是中文属性测试";
00137 strncpy(&data[0], attr, strlen(attr));
00138 ermXmlSetAttributeString(&manifest, "/package/index/pagelist[1]/page", "url", data, MAX_LEN);
00139
00140
00141 ermXmlSetAttributeString(&manifest, "/package/index/pagelist[1]/page", "abc", data, MAX_LEN);
00142
00143 ermXmlSaveAndClose(&manifest);
00144 }
00145
00146
00147 void testCreate(const char *pathname)
00148 {
00149 erManifest manifest;
00150
00151 char data[MAX_LEN] = {0};
00152
00153
00154 ermXmlCreateFile(pathname, &manifest);
00155 printf("create done!\n");
00156
00157 memset(&data[0], 0, MAX_LEN);
00158 strncpy(data, "abcde", 5);
00159 ermXmlNewString(&manifest, "/", "packet", data);
00160 printf("newstring done!\n");
00161 ermXmlNewString(&manifest, "/packet", "metadata", data);
00162
00163 ermXmlNewString(&manifest, "/packet/metadata", "y-metadata", data);
00164
00165 ermXmlNewString(&manifest, "/packet/metadata/y-metadata", "pages", "");
00166 ermXmlNewString(&manifest, "/packet/metadata/y-metadata/pages", "page", "");
00167 ermXmlNewString(&manifest, "/packet/metadata/y-metadata/pages/page[1]", "strokes", "");
00168 ermXmlNewString(&manifest, "/packet/metadata/y-metadata/pages/page[1]/strokes", "stroke", "");
00169
00170 ermXmlNewString(&manifest, "/packet/metadata/y-metadata/pages", "page", "");
00171 ermXmlNewString(&manifest, "/packet/metadata/y-metadata/pages/page[2]", "strokes", "");
00172 ermXmlNewString(&manifest, "/packet/metadata/y-metadata/pages/page[2]/strokes", "stroke", "");
00173
00174
00175 printf("save done!\n");
00176 ermXmlSaveAndClose(&manifest);
00177 }
00178
00179
00180 void testHugeCreate(const char *pathname)
00181 {
00182 erManifest manifest;
00183
00184 char data[MAX_LEN] = {0};
00185
00186
00187 ermXmlCreateFile(pathname, &manifest);
00188 printf("create done!\n");
00189
00190 memset(&data[0], 0, MAX_LEN);
00191 strncpy(data, "abcde", 5);
00192 ermXmlNewString(&manifest, "/", "packet", data);
00193 printf("newstring done!\n");
00194 ermXmlNewString(&manifest, "/packet", "metadata", data);
00195
00196 ermXmlNewString(&manifest, "/packet/metadata", "y-metadata", data);
00197 ermXmlNewString(&manifest, "/packet/metadata/y-metadata", "pages", "");
00198
00199 int pages = 4;
00200 int i = 1;
00201 char xPath[MAX_LEN] = {0};
00202 char stroke[STROKE_LEN] = {0};
00203 for(;i < pages; ++i)
00204 {
00205
00206 ermXmlNewString(&manifest, "/packet/metadata/y-metadata/pages", "page", "");
00207 memset(xPath, 0, MAX_LEN);
00208 snprintf(xPath, MAX_LEN, "/packet/metadata/y-metadata/pages/page[%d]", i);
00209 ermXmlNewString(&manifest, xPath, "strokes", "");
00210
00211 int strokes = 10;
00212 int j = 1;
00213 strcat(xPath, "/strokes");
00214
00215 memset(stroke, 'a', STROKE_LEN - 10);
00216 for(;j < strokes; ++j)
00217 {
00218 ermXmlNewString(&manifest, xPath, "stroke", stroke);
00219 }
00220 }
00221
00222 i = 1;
00223 snprintf(xPath, MAX_LEN, "/packet/metadata/y-metadata/pages/page[%d]", i);
00224 ermXmlSetString(&manifest, xPath, "");
00225
00226 xmlDocDump(stderr, manifest.pDoc);
00227
00228 printf("save done!\n");
00229 ermXmlSaveAndClose(&manifest);
00230 }
00231
00232
00233 void testBrowserIndexFile(const char *pathName)
00234 {
00235
00236 struct timeval t1, t2;
00237 gettimeofday(&t1, NULL);
00238
00239 erManifest manifest;
00240
00241 char url[MAX_LEN] = {0};
00242 char number[MAX_LEN] = {0};
00243 char type[MAX_LEN] = {0};
00244 char xpath[MAX_LEN] = {0};
00245 ermXmlOpenFile(pathName, &manifest);
00246
00247 printf("open done!\n");
00248 int i = 1, j = 1;
00249 int ret = RET_OK;
00250 while (1)
00251 {
00252 sprintf(xpath, "/package/index/pagelist[%d]", i);
00253 ret = ermXmlGetAttributeString(&manifest, xpath, "type", type, MAX_LEN);
00254 ret = ermXmlGetAttributeString(&manifest, xpath, "count", number, MAX_LEN);
00255 if (RET_ERR == ret) break;
00256 printf("type:\t%s\tcount:\t%s\n", type, number);
00257
00258 j = 1;
00259 while(1)
00260 {
00261 sprintf(xpath, "/package/index/pagelist[%d]/page[%d]", i, j);
00262
00263 memset(url, 0, MAX_LEN); memset(number, 0, MAX_LEN);
00264 ermXmlGetAttributeString(&manifest, xpath, "url", url, MAX_LEN);
00265 ret = ermXmlGetAttributeString(&manifest, xpath, "number", number, MAX_LEN);
00266
00267 if (RET_ERR == ret) break;
00268 printf("url:\t%s\t", url);
00269 printf("number:\t%s\n", number);
00270 ++j;
00271 }
00272
00273 ++i;
00274 }
00275 ermXmlClose(&manifest);
00276
00277 gettimeofday(&t2, NULL);
00278 printf("time used\tsec %ld usec %ld\n", t2.tv_sec -t1.tv_sec, t2.tv_usec - t1.tv_usec);
00279 }
00280
00281 void testDel(const char *pathName)
00282 {
00283 erManifest manifest;
00284
00285
00286 ermXmlOpenFile(pathName, &manifest);
00287
00288 printf("Open done!\n");
00289
00290 int i = 0;
00291 for(; i < 10; ++i)
00292 {
00293 ermXmlRemoveNode(&manifest, "/packet/metadata/y-metadata/pages/page[1]");
00294 }
00295 ermXmlSaveAndClose(&manifest);
00296
00297 }
00298
00299 void testSpeXpath(const char *pathname)
00300 {
00301 erManifest manifest;
00302
00303 if (RET_OK !=ermXmlOpenFile(pathname, &manifest))
00304 {
00305 fprintf(stderr, "could not open file!\n");
00306 return;
00307 }
00308
00309 char xPath[1024] = {0};
00310 char data[MAX_LEN] = {0};
00311 snprintf(xPath, 1024, "//page[@id=\"%s\"]", "1");
00312 fprintf(stderr, "%s\n", xPath);
00313 if (RET_ERR == ermXmlExist(&manifest, xPath))
00314 {
00315 fprintf(stderr, "error!\n");
00316 ermXmlClose(&manifest);
00317 return;
00318 }
00319
00320 strncat(xPath, "/strokes/stroke", 1024);
00321 ermXmlGetString(&manifest, xPath, data, MAX_LEN);
00322 fprintf(stderr, "result: %s\n", data);
00323
00324 ermXmlClose(&manifest);
00325 }
00326
00327
00328 void testSample(const char *pathname)
00329 {
00330 erManifest manifest;
00331
00332 char data[MAX_LEN] = {0};
00333
00334
00335 ermXmlCreateFile(pathname, &manifest);
00336 printf("create done!\n");
00337
00338 memset(&data[0], 0, MAX_LEN);
00339 ermXmlNewString(&manifest, "/", "packet", "");
00340 printf("newstring done!\n");
00341 ermXmlNewString(&manifest, "/packet", "metadata", "");
00342 sleep(1);
00343 printf("1 done!\n");
00344
00345 ermXmlNewString(&manifest, "/packet/metadata", "y-metadata", "");
00346
00347 ermXmlNewString(&manifest, "/packet/metadata/y-metadata", "pages", "");
00348
00349 ermXmlNewString(&manifest, "/packet/metadata", "index", "");
00350
00351 ermXmlNewString(&manifest, "/packet/metadata/index", "pagelist", "");
00352
00353 ermXmlSetAttributeString(&manifest, "/packet/metadata/index/pagelist", "type", "irfanview", 9);
00354 ermXmlSetAttributeInt(&manifest, "/packet/metadata/index/pagelist", "count", 689);
00355
00356 printf("going to create page list!\n");
00357 int pages = 689;
00358 int i = 1;
00359 char xPath[MAX_LEN] = {0};
00360 char tmp[MAX_LEN] = {0};
00361 for(i = 1;i <= pages; ++i)
00362 {
00363 ermXmlNewString(&manifest, "/packet/metadata/index/pagelist", "page", "");
00364 memset(xPath, 0, MAX_LEN);
00365 snprintf(xPath, MAX_LEN, "/packet/metadata/index/pagelist/page[%d]", i);
00366 snprintf(tmp, MAX_LEN, "%03d", i);
00367 ermXmlSetAttributeString(&manifest, xPath, "number", tmp, strlen(tmp));
00368 ermXmlSetAttributeString(&manifest, xPath, "url", "pagl04.html",11);
00369 }
00370 ermXmlSaveAndClose(&manifest);
00371 }
00372
00373
00374
00375 int main(int argc, char *argv[])
00376 {
00377 dumparg(argc, argv);
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394 testSample(argv[1]);
00395 return 1;
00396 }