2015-01-12 2 views
0

У меня есть простой XML-файл, подобный этому, который хранится в char [].C извлечь данные из XML

<?xml-stylesheet type='text/xsl' href='http://prova'?> 
<ns2:operation-result xmlns:ns1="http://www.w3.org/1999/xlink" xmlns:ns2="http://www.prova.it/pr/a" operation-start="2015-01-12T15:22:46.890+01:00" operation-end="2015-01-12T15:22:46.891+01:00"><ns2:error code="ROSS-A001"><ns2:msg>Error</ns2:msg></ns2:error></ns2:operation-result> 

Мне нужна простая процедура C, чтобы извлечь только код ошибки (в данном случае ROSS-A001) и сообщение об ошибке между и поместить его в два гольца [].

Как я могу это сделать?

Большое спасибо

+0

В каком случае? Вы что-то упустили? Вы просите XML-парсер, написанный на C? –

+0

Возможный дубликат [XML Parser for C] (http://stackoverflow.com/questions/399704/xml-parser-for-c) – Jayan

+0

Несмотря на то, что он чувствует себя как массивный излишний для такой относительно простой задачи, используйте настоящий XML-код (например, [libxml2] (http://xmlsoft.org/)). В прошлом я вручную взломал свой собственный парсер XML, и это не стоило усилий. –

ответ

1

насчет

char *extractErrorCode(const char *xml) 
{ 
    char *pointer; 
    char *result; 
    char *tail; 
    size_t length; 

    /* advance the pointer to the = character, and skip the " -> +1 */ 
    pointer = strstr(xml, "error code=") + strlen("error code=") + 1; 
    result = NULL; 
    if (pointer == NULL) 
     return NULL; 

    length = 0; 
    tail = strchr(pointer, '>'); 
    if (tail == NULL) 
     return NULL; 
    /* -1 skip the trailing " */ 
    length = tail - pointer - 1; 
    if (length > 0) 
    { 
     result = malloc(1 + length); 
     if (result == NULL) 
      return NULL; 
     result[length] = '\0'; 

     memcpy(result, pointer, length); 
    } 

    return result; 
} 

запомнить, чтобы освободить возвращаемое значение, если это не NULL

Смежные вопросы