2012-04-02 11 views
0

Ich bin in der Lage, XML erfolgreich zu analysieren, aber ich stehe probelem beim Extrahieren von Daten aus CDATA. Dafür benutze ich XML_SetCdataSectionHandler(parser,CDATAstart,CDATAend). Und mit diesem kann mein Programm identifizieren, wo die cdata existiert, aber ich bin nicht in der Lage, Daten von dieser cdata zu bekommen. Ich weiß nicht, wie man innerhalb und CDATAend kodiert, um die Daten zu extrahieren. Kann mir bitte jemand dabei helfen? Mein XML-Parser wird unterDatenextraktion von cdata mit Expat in C

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; 
} 

Antwort

0

Die CdataSectionHandler s gezeigt nur Ihnen sagen, wenn ein CDATA-Abschnitt beginnt und endet, die eigentlichen Daten durch die CharacterDataHandler geliefert wird (oder, falls ausgelassen, die DefaultHandler).