C 从 XML 中提取数据
C extract data from XML
我有一个像这样的简单 xml 文件存储在 char[] 中。
<?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)和两者之间的错误消息并将其放入两个 char[]。
我该怎么做?
非常感谢
怎么样
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] = '[=10=]';
memcpy(result, pointer, length);
}
return result;
}
记得释放 return 值,如果它不是 NULL
我有一个像这样的简单 xml 文件存储在 char[] 中。
<?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)和两者之间的错误消息并将其放入两个 char[]。
我该怎么做?
非常感谢
怎么样
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] = '[=10=]';
memcpy(result, pointer, length);
}
return result;
}
记得释放 return 值,如果它不是 NULL