通过简单的例子,告诉大家如何使用libxml2库来解析xml格式的配置文件,本文中将使用如下xml:
<?xml version="1.0" encoding="UTF-8"?>
<Params>
<ServerInfo>
<ServerIP>192.168.10.238</ServerIP>
<ServerPort>7777</ServerPort>
</ServerInfo>
<MediaServerInfo>
<ServerIP>192.168.10.238</ServerIP>
<Name>media_server_888</Name>
<Type>media_server</Type>
<VideoTCPPort>8888</VideoTCPPort>
<AudioTCPPort>8889</AudioTCPPort>
<GlobalID>8888</GlobalID>
</MediaServerInfo>
</Params>
如何解析出xml文件中各个参数的值?具体代码如下:
struct ServerInfo{
char BusinessServerIP[16];
unsigned int BusinessPort;
char MediaServerIP[16];
char MediaServerName[64];
char MediaServerType[64];
unsigned int VideoTCPPort;
unsigned int AudioTCPPort;
unsigned int GlobalID;
}
static bool ParseConfigInfo(ServerInfo *si)
{
xmlDocPtr pdoc;
xmlNodePtr proot;
//忽略xml配置文件中的空行
xmlKeepBlanksDefault(0);
//加载xml文件
pdoc = xmlParseFile(CONFIG_NAME);
if(!pdoc)
return false;
proot = xmlDocGetRootElement(pdoc);
if(!proot)
return false;
xmlNodePtr pcur = proot->xmlChildrenNode;
while( pcur != NULL )
{
//cout << pcur->name <<endl;
if(!xmlStrcmp(pcur->name, (const xmlChar *)"ServerInfo"))
{
//cout << "Got Server node" <<endl;
xmlNodePtr child = pcur->children;
while( child != NULL )
{
if(!xmlStrcmp(child->name,(const xmlChar *)"ServerIP"))
{
strcpy(si->BusinessServerIP, (char*)xmlNodeGetContent(child));
}
if(!xmlStrcmp(child->name,(xmlChar *)"ServerPort"))
{
si->BusinessPort = atoi((const char *)xmlNodeGetContent(child));
}
child = child->next;
}
}
else if(!xmlStrcmp(pcur->name, (const xmlChar *)"MediaServerInfo"))
{
xmlNodePtr child = pcur->children;
while( child != NULL )
{
if(!xmlStrcmp(child->name,(const xmlChar *)"ServerIP"))
{
strcpy(si->MediaServerIP, (char*)xmlNodeGetContent(child));
}
if(!xmlStrcmp(child->name,(xmlChar *)"Name"))
{
strcpy(si->MediaServerName, (char *)xmlNodeGetContent(child));
}
if(!xmlStrcmp(child->name,(xmlChar *)"Type"))
{
strcpy(si->MediaServerType, (char *)xmlNodeGetContent(child));
}
if(!xmlStrcmp(child->name,(xmlChar *)"VideoTCPPort"))
{
si->VideoTCPPort = atoi((const char *)xmlNodeGetContent(child));
}
if(!xmlStrcmp(child->name,(xmlChar *)"AudioTCPPort"))
{
si->AudioTCPPort = atoi((const char *)xmlNodeGetContent(child));
}
if(!xmlStrcmp(child->name,(xmlChar *)"GlobalID"))
{
si->GlobalID = atoi((const char *)xmlNodeGetContent(child));
}
child = child->next;
}
}
pcur = pcur->next;
}
xmlFreeDoc(pdoc);
xmlCleanupParser();
xmlMemoryDump();
return true;
}
static void ShowConfigInfo(ServerInfo *si)
{
cout << "BusinessServerIP:" << si->BusinessServerIP <<endl;
cout << "BusinessPort:" << si->BusinessPort<<endl;
cout << "MediaServerIP:" << si->MediaServerIP<<endl;
cout << "MediaServerName:" << si->MediaServerName<<endl;
cout << "MediaServerType:" << si->MediaServerType<<endl;
cout << "VideoTCPPort:" << si->VideoTCPPort<<endl;
cout << "AudioTCPPort:" << si->AudioTCPPort<<endl;
cout << "GlobalID:" << si->GlobalID<<endl;
}
如何使用libxml2解析xml
最新推荐文章于 2024-06-22 22:32:54 发布