0

XML を正常に解析できますが、.xml からデータを抽出する際に問題に直面していCDATAます。このために、私は を使用してXML_SetCdataSectionHandler(parser,CDATAstart,CDATAend)います。これを使用することで、私のプログラムは がcdata存在する場所を特定できますが、そこから内部データを取得することはできません。内部でコーディングしてデータを抽出するcdata方法がわかりません。誰かがこれを行うのを手伝ってくれませんか。私のxmlパーサーを以下に示しますCDATAstartCDATAend

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

CdataSectionHandler、CDATA セクションの開始時と終了時のみを示します。実際のデータは、CharacterDataHandler(省略した場合はDefaultHandler) を介して配信されます。

于 2012-04-02T07:59:20.367 に答える