Извлечение данных из cdata с использованием expat в C - PullRequest
0 голосов
/ 02 апреля 2012

Я могу успешно проанализировать XML, но при извлечении данных из CDATA я сталкиваюсь с проблемой. Для этого я использую XML_SetCdataSectionHandler(parser,CDATAstart,CDATAend). И используя это, моя программа может определить, где существует cdata, но я не могу получить данные из этого cdata. Я не знаю, как кодировать внутри CDATAstart и CDATAend, чтобы извлечь данные , Может кто-нибудь, пожалуйста, помогите мне в этом. Мой xml-парсер показан ниже

int parse_xml(char *buff, size_t buff_size) {
    FILE *fp;
    fp = fopen("sos.xml", "r");
    if (fp == NULL) {
            printf("Failed to open file\n");
            return 1;
    }
    XML_Parser parser = XML_ParserCreate(NULL);
    XML_SetElementHandler(parser, start_element, end_element);
    XML_SetCharacterDataHandler(parser, handle_data);
    XML_SetCdataSectionHandler(parser,CDATAstart,CDATAend);
    XML_SetCharacterDataHandler(parser, handle_data);
    memset(buff, 0, buff_size);
    printf("strlen(buff) before parsing: %d\n", strlen(buff));
    size_t file_size = 0;
    file_size = fread(buff, sizeof(char), buff_size, fp);  /* parse the xml */
    if (XML_Parse(parser, buff, strlen(buff), XML_TRUE) == XML_STATUS_ERROR)
    {
            printf("Error: %s\n", XML_ErrorString(XML_GetErrorCode(parser)));
    }
    fclose(fp);
    XML_ParserFree(parser);
    return 0;
}

1 Ответ

0 голосов
/ 02 апреля 2012

CdataSectionHandler s сообщает вам только, когда начинается и заканчивается раздел CDATA, фактические данные доставляются через CharacterDataHandler (или, если не указано, DefaultHandler).

...