使用C中的expat从cdata中提取数据



我能够成功解析XML,但在从CDATA中提取数据时遇到了问题。为此,我使用XML_SetCdataSectionHandler(parser,CDATAstart,CDATAend)。通过使用它,我的程序可以识别cdata存在的位置,但我无法从cdata获取内部数据。我不知道如何在CDATAstartCDATAend内部编码以提取数据。有人能帮我做这件事吗。我的xml解析器显示在下面

int parse_xml(char *buff, size_t buff_size) {
    FILE *fp;
    fp = fopen("sos.xml", "r");
    if (fp == NULL) {
            printf("Failed to open filen");
            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: %dn", 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: %sn", XML_ErrorString(XML_GetErrorCode(parser)));
    }
    fclose(fp);
    XML_ParserFree(parser);
    return 0;
}

CdataSectionHandler只告诉您CDATA部分开始和结束时,实际数据通过CharacterDataHandler(如果省略,则通过DefaultHandler)传递。

最新更新