【问题标题】:Data extraction from cdata using expat in C在 C 中使用 expat 从 cdata 中提取数据
【发布时间】:2012-04-15 20:19:34
【问题描述】:

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

【问题讨论】:

    标签: c xml-parsing cdata expat-parser


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 2019-02-15
      • 2011-07-10
      • 1970-01-01
      • 2020-09-21
      • 2011-05-25
      相关资源
      最近更新 更多