⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parser.c

📁 libnxml-no-curl-简化版2007-07-01,一个别很不错的XML生成和解析程序。
💻 C
字号:
//====================================================================// 文件:parser.c// 描述:用于解释指定的专用xml文件,获取服务器信息以及文件信息// 作者:seeker// 日期:2007-06-19//====================================================================#include "nxml.h"#include <stdarg.h>// 下载地址结构typedef struct ServerUrl{  char *svr_url;  // 服务器地址  char *svr_port; // 端口(保留) }ServerUrl,*PServerUrl;// xml包含的文件信息结构typedef struct FileInfo{  char *filehash;     // 文件hash  char *filename;     // 文件名  char *playdatetime; // 节目时间  char *playlength;   // 播放时长  char *coursename;   // 课程名称  char *techer;       // 主讲人、单位  char *tcobj;        // 教学对象}FileInfo,*PFileInfo;//====================================================================/*void my_printf (char *str, ...){  va_list va;  va_start (va, str);  vfprintf (stderr, str, va);  va_end (va);}*/int main (int argc, char **argv){  nxml_t *data;     //xml文件对象  nxml_error_t ret; //函数执行结果  nxml_data_t *element, *tmp,*tmp2;//*tmp3; // 节点数据 // nxml_doctype_t *doctype;//编码类型    if (argc != 2)    {      fprintf (stderr,	       "Usage?\n\t%s url_xml\n\nExample:\n\t%s [file.xml|http://server/file.xml]\n\n",	       argv[0], argv[0]);      return 1;    }  //初始化文件对象  ret = nxml_new (&data);  if (ret != NXML_OK)    {      puts (nxml_strerror (ret));      return 1;    }  /*// 打印xml 文件信息:  printf("FileName:%s\nSize:%d\nVersion:%d\nStandalone:%d\nEncoding:%s\n",        data->file,data->size,data->version,data->standalone,data->encoding);*/   /* ret = nxml_set_func (data, my_printf);//???  if (ret != NXML_OK)    {      puts (nxml_strerror (ret));      return 1;    }*/ /* if (!strncmp (argv[1], "http://", 7)) //判断是否http:// 开头    ret = nxml_parse_url (data, argv[1]);  else*/    ret = nxml_parse_file (data, argv[1]);// 文件而已   if (ret != NXML_OK)    {      puts (nxml_strerror (ret));      return 1;    }  // 开始解释文件  // 根节点  nxml_root_element (data, &element);// 查找根节点    //printf ("根节点: %p: -%s-\n", element, element ? element->value : "");    printf ("根节点: -%s-\n", element ? element->value : "");  if (element)// 如果存在根节点  {      tmp = element->children;      while (tmp)    	{	     // char *hash,*completed,*leecher;        printf ("\t子节点1: -%s-\n",tmp ? tmp->value : "");	        	     // free(hash);free(completed);free(leecher);      	  	     //-----------------------------------   	      tmp2=tmp->children; // 打印2级节点和对应的参数值                PFileInfo pfi=(PFileInfo)malloc(sizeof(struct FileInfo));        memset(pfi,'\0',sizeof(struct FileInfo));	      	      while(tmp2)	      {           printf ("\t\t子节点2: -%s-\n",tmp2 ? tmp2->value : "");            	         if(strlen(tmp2->value)>0) //保证节点名不为空	         {	           if( strcmp(tmp2->value,"filehash")==0)	             pfi->filehash=nxmle_find_attribute(tmp2,tmp2->value,&ret);	           if( strcmp(tmp2->value,"filename")==0)	             pfi->filename=nxmle_find_attribute(tmp2,tmp2->value,&ret);	          	           if( strcmp(tmp2->value,"playdatetime")==0)	             pfi->playdatetime=nxmle_find_attribute(tmp2,tmp2->value,&ret);	           if( strcmp(tmp2->value,"playlength")==0)	             pfi->playlength=nxmle_find_attribute(tmp2,tmp2->value,&ret);	           if( strcmp(tmp2->value,"coursename")==0)	             pfi->coursename=nxmle_find_attribute(tmp2,tmp2->value,&ret);	           if( strcmp(tmp2->value,"techer")==0)	             pfi->techer=nxmle_find_attribute(tmp2,tmp2->value,&ret);	           if( strcmp(tmp2->value,"tcobj")==0)	             pfi->tcobj=nxmle_find_attribute(tmp2,tmp2->value,&ret);	          }	        //================================	     /*    tmp3=tmp2->children; // 打印3级节点和对应的参数值	         while(tmp3)	         {              char *id,*ip,*uploaded,*download;              id= nxmle_find_attribute(tmp3,"id",&ret);              ip= nxmle_find_attribute(tmp3,"ip",&ret);              uploaded= nxmle_find_attribute(tmp3,"uploaded",&ret);              download= nxmle_find_attribute(tmp3,"downloaded",&ret);                 printf ("\t\t\t子节点3: -%s-\n",tmp3 ? tmp3->value : "");	            printf ("               \tid=%s\n\t\tip=%s\n\t\tup=%s\n\t\tdl=%s\n",id,ip,uploaded,download);  	            	            free(id); free(ip); free(uploaded); free(download);	            tmp3 = tmp3->next;	         }*/	         tmp2 = tmp2->next;  	      }//while	      //================================ 	      printf ("\n               \tfilehash=%s\n\t\tfilename=%s\n\t\tplaydatetime=%s\n\t\tplaylength=%s\n\t\tcoursename=%s\n\t\ttecher=%s\n\t\ttcobj=%s\n\n",	              pfi->filehash,pfi->filename,pfi->playdatetime,	              pfi->playlength,pfi->coursename,pfi->techer,pfi->tcobj); 	         	      free(pfi);	      //----------------------------------	      tmp = tmp->next;	    }  }/*  // 查找指定节点!  nxml_find_element (data, element, "welcome-file-list", &element);  if (element && nxml_find_element (data, element, "welcome-file", &element) == NXML_OK      && element)    {      printf ("\nwelcome-file: -%p- -%s-\n", element,element->value);    }         // 文件类型  nxml_doctype_element (data, &doctype);  if (doctype)    printf ("\nDoctype: -%s-%s-\n", doctype->name, doctype->value);*/  nxml_free (data); // 释放内存  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -