0
XMLを正常に解析できましたが、CDATA
からデータを抽出する際に問題が発生しています。このため、私はXML_SetCdataSectionHandler(parser,CDATAstart,CDATAend)
を使用しています。そしてこれを使用すると、私のプログラムはcdata
がどこに存在するのか識別することができますが、その中からデータを取得することはできませんcdata
。CDATAstart
とCDATAend
のコードをどのようにコードするのか分かりません。誰かがこれをするのを助けてくれますか?私のXMLパーサーはCでexpatを使用してcdataからデータを抽出
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;
}