2012-04-02 36 views
0

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

答えて

0

CDATAセクションの開始と終了は、実際のデータがCharacterDataHandlerを通じて配信されたときCdataSectionHandler sが唯一のあなたを教えて(省略された場合、または、DefaultHandler)の下に示されています。