c语言xml报文解析函数 c语言 xml解析

用c语言编写一个程序,程序包括main函数和一个解析xml字符串的unpark函数 。其中main,负责显示xml的内容自己去网上搜这篇博客文章:(百度知道好像不让发链接)
《C++的XML编程经验――LIBXML2库使用指南》
里面有很详细的讲解c语言xml报文解析函数,包括怎么配置c语言xml报文解析函数,怎么使用等等,c语言xml报文解析函数我就是照着这个解析出XML内容的
C语言xml解析把所有c语言xml报文解析函数的数据当做一个字符串
收到数据后先strstr(buffer,"?xml version=\"1.0\" encoding=\"UTF-8\"?");
如果返回c语言xml报文解析函数的是NULL则表示没有这段 退出
buffer是c语言xml报文解析函数你收到的数据起始地址
c语言如何解析xml并将所有内容存入数组/* 前段时间恰好做过类似c语言xml报文解析函数的东西c语言xml报文解析函数 , 代码可以给你参考下 。
*Xml配置见最后
*/
typedef struct SrcFileFmt
{
intColID;
charColCode[64];/* 字段英文名称 */
charColName[128];/* 字段中文名称*/
charColType[20];/* 字段类型(包含长度) */
charColComment[128];/* 字段描述 */
}SrcFileFmt;
int main(int argc, char **argv)
{
SrcFileFmt SrcFileFmt[128];
int iNum = -1;
if ( 2argc )
{
printf("Usage: %s SrcXmlFile\n", argv[0]);
return -1;
}
iNum = parseSourceCfg(SrcCfgFile, SrcFileFmt);
if (iNum == -1)
{
return -1;
}
return 0;
}
/* 调用此函数后,xml文件的内容会被存储到结构体数组SrcFileFmt srcfilefmt[]中
* 此函数依赖于libxml2-2.9.2.tar.xz
【c语言xml报文解析函数 c语言 xml解析】 */
int parseSourceCfg(char *FileName, SrcFileFmt srcfilefmt[])
{ /* 解析源文件xml,FileName 为源xml文件名 */
xmlDocPtr doc;
xmlNodePtr cur, root;
char sFileName[64] = {'\0'};
int cnt = 0;
if (FileName == NULL)
{
return -1;
}
sprintf(sFileName, "%s.xml", FileName);
doc = xmlParseFile(sFileName);
if (doc == NULL)
{
return -1;
}
root = xmlDocGetRootElement(doc);
if (root == NULL) {
xmlFreeDoc(doc);
return(-1);
}
if (xmlStrcmp(root-name, (const xmlChar *) "SrcRoot"))
{
xmlFreeDoc(doc);
return -1;
}
cur = root-xmlChildrenNode;
while (cur != NULL)
{
if ((!xmlStrcmp(cur-name, (const xmlChar *)"Column")))
{
xmlChar *key;
xmlNodePtr cur_sub = cur;
cur_sub = cur_sub-xmlChildrenNode;
while (cur_sub != NULL)
{
if ((!xmlStrcmp(cur_sub-name, (const xmlChar *)"ColID"))) {
key = xmlNodeListGetString(doc, cur_sub-xmlChildrenNode, 1);
killblank((char*)key);
srcfilefmt[cnt].ColID = atoi((char*)key);
xmlFree(key);
}
if ((!xmlStrcmp(cur_sub-name, (const xmlChar *)"ColCode"))) {
key = xmlNodeListGetString(doc, cur_sub-xmlChildrenNode, 1);
killblank((char*)key);
strcpy(srcfilefmt[cnt].ColCode, (char*)key);
xmlFree(key);
}
else if ((!xmlStrcmp(cur_sub-name, (const xmlChar *)"ColName"))) {
key = xmlNodeListGetString(doc, cur_sub-xmlChildrenNode, 1);
killblank((char*)key);
strcpy(srcfilefmt[cnt].ColName, (char*)key);
xmlFree(key);
}
else if ((!xmlStrcmp(cur_sub-name, (const xmlChar *)"ColType"))) {
key = xmlNodeListGetString(doc, cur_sub-xmlChildrenNode, 1);
killblank((char*)key);
strcpy(srcfilefmt[cnt].ColType, (char*)key);
xmlFree(key);
}
else if ((!xmlStrcmp(cur_sub-name, (const xmlChar *)"ColComment"))) {
key = xmlNodeListGetString(doc, cur_sub-xmlChildrenNode, 1);
killblank((char*)key);
strcpy(srcfilefmt[cnt].ColComment, (char*)key);

推荐阅读