⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_parser.c

📁 WAP Binary XML 简单地说
💻 C
字号:
/* * libwbxml, the WBXML Library. * Copyright (C) 2002-2005 Aymerick Jehanne <aymerick@jehanne.org> *  * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. *  * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. *  * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA *  * LGPL v2.1: http://www.gnu.org/copyleft/lesser.txt *  * Contact: libwbxml@aymerick.com * Home: http://libwbxml.aymerick.com */ /** * @file test_parser.c * @ingroup test * * @author Aymerick J閔anne <libwbxml@aymerick.com> * @date 03/03/21 * * @brief Test the WBXML Parser */#include <string.h>#include <wbxml.h>#define INPUT_BUFFER_SIZE 1000/** Start Document Callback */void parse_clb_start_document(void *ctx, WB_LONG charset, const WBXMLLangEntry *lang){    printf("Parsing Document:\n"           "\tRoot Element: %s\n"           "\tPublic ID: %s\n"           "\tDTD: %s\n",           lang->publicID->xmlRootElt,           lang->publicID->xmlPublicID,           lang->publicID->xmlDTD);}/** End Document Callback */void parse_clb_end_document(void *ctx){    printf("End of Document\n");}/** Start Element Callback */void parse_clb_start_element(void *ctx, WBXMLTag *element, WBXMLAttribute **atts, WB_BOOL empty){        WB_ULONG *indent = (WB_ULONG *) ctx;        WB_ULONG i = 0, j = 0;        /* Indent start Element */    for (i=0; i<*indent; i++)        printf(" ");    /* Write start Element */    printf("<%s", wbxml_tag_get_xml_name(element));        /* Write Attributes */    if (atts != NULL) {        while (atts[j] != NULL)        {            /* Write Attribute Name */            printf(" %s=\"%s\"", wbxml_attribute_get_xml_name(atts[j]), wbxml_attribute_get_xml_value(atts[j]));              j++;        }            }        /* End of start Element */    if (empty) {        printf("/>\n");    }    else {        printf(">\n");        (*indent)++;    }}/** End Element Callback */void parse_clb_end_element(void *ctx, WBXMLTag *element, WB_BOOL empty){    WB_ULONG *indent = (WB_ULONG *) ctx;    WB_ULONG i = 0;    if (!empty) {        (*indent)--;        /* Indent End Element */        for (i=0; i<*indent; i++)            printf(" ");                    /* Write end tag */        printf("</%s>\n", wbxml_tag_get_xml_name(element));            }}/** Characters Callback */void parse_clb_characters(void *ctx, WB_UTINY *ch, WB_ULONG start, WB_ULONG length){    WB_ULONG *indent = (WB_ULONG *) ctx;    WB_ULONG i = 0;        /* Indent Characters */    for (i=0; i<*indent; i++)        printf(" ");    /* Write Content */    for(i=start; i<length; i++)        printf("%c", ch[i]);    printf("\n");}/** Main Function */WB_LONG main(WB_LONG argc, WB_TINY **argv) {    FILE *input_file = NULL;    WB_ULONG count = 0, total = 0, wbxml_len = 0;    WB_UTINY input_buffer[INPUT_BUFFER_SIZE + 1];    WBXMLParser *wbxml_parser = NULL;    WB_UTINY *wbxml = NULL;    WB_ULONG indent = 0, error_index = 0;    WBXMLError ret = WBXML_OK;    WBXMLContentHandler parse_handler =         {            parse_clb_start_document,            parse_clb_end_document,            parse_clb_start_element,            parse_clb_end_element,            parse_clb_characters,            NULL        };            if (argc != 2) {        printf("Missing argument: WBXML Filename");        return 0;    }    /**********************************     *  Read the WBXML Document     */    /* Open WBXML document */    if ((input_file = fopen(argv[1], "rb")) == NULL) {        printf("Failed to open %s\n", argv[1]);        return 0;    }    /* Read WBXML document */    while(!feof(input_file))    {        count = fread(input_buffer, sizeof(WB_UTINY), INPUT_BUFFER_SIZE, input_file);        if (ferror(input_file))      {            printf("Error while reading from file %s\n", argv[1]);            fclose(input_file);            if (wbxml != NULL)                wbxml_free(wbxml);            return 0;        }        total += count;        if ((wbxml = wbxml_realloc(wbxml, total)) == NULL) {            printf("Not enought memory\n");            fclose(input_file);            if (wbxml != NULL)                wbxml_free(wbxml);            return 0;        }        memcpy(wbxml + wbxml_len, input_buffer, count);        wbxml_len += count;    }    fclose(input_file);        /* Create WBXML Parser */    if ((wbxml_parser = wbxml_parser_create()) == NULL) {        wbxml_free(wbxml);        return 0;    }        /* Initialize WBXML Parser */    wbxml_parser_set_user_data(wbxml_parser, &indent);    wbxml_parser_set_content_handler(wbxml_parser, &parse_handler);        /* Parse WBXML document */    if ((ret = wbxml_parser_parse(wbxml_parser, wbxml, wbxml_len)) != WBXML_OK)    {        error_index = wbxml_parser_get_current_byte_index(wbxml_parser);        printf("Parsing failed at %u - Token %x - %s", error_index, wbxml[error_index], wbxml_errors_string(ret));    }    else {        printf("Parsing OK !");              }        /* Destroy WBXML Parser */    wbxml_parser_destroy(wbxml_parser);    /* Free wbxml buffer */    wbxml_free(wbxml);    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -