0

我能够成功解析 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 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;
}
4

1 回答 1

0

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

于 2012-04-02T07:59:20.367 回答