采用libxml2解析xml资源
来源:互联网 发布:java jlabel 链接 编辑:程序博客网 时间:2024/05/17 08:01
通过分析xml资源,发现它不是一个标准的xml资源,通过调用xml解析
xmlXPathObjectPtr getNodeset(xmlDocPtr doc, const xmlChar *xpath){ xmlXPathContextPtr context; xmlXPathObjectPtr result; context = xmlXPathNewContext(doc); if (context == NULL) { printf("context is NULL, [%s, %d]\n", __FUNCTION__, __LINE__); return NULL; } result = xmlXPathEvalExpression(xpath, context); xmlXPathFreeContext(context); if (result == NULL) { printf("xmlXPathEvalExpression return NULL, [%s, %d]\n", __FUNCTION__, __LINE__); return NULL; } if (xmlXPathNodeSetIsEmpty(result->nodesetval)) { xmlXPathFreeObject(result); printf("nodeset is empty, [%s, %d]\n", __FUNCTION__, __LINE__); return NULL; } return result;}
xmlXPathObjectPtr getNodeset(xmlDocPtr doc, const xmlChar *xpath);BOOL ParseFreeiIptvEpgInforFunc(char *pcDownData, int iGetTotalLen, FREEI_IPTV_EPG *pstOTTData){int iIndex = 0;BOOL bRetuFlg = FALSE;xmlDocPtr doc;xmlXPathObjectPtr xml_entry = NULL;xmlChar *xpath = BAD_CAST("/tv/programme");if (pcDownData == NULL){printf ("[%s, %d] not malloc xml memory\n", __FUNCTION__, __LINE__);return bRetuFlg;}doc = xmlReadMemory(pcDownData, iGetTotalLen, "noname.xml", NULL, 0);if (doc == NULL){return bRetuFlg;}xml_entry = getNodeset(doc, xpath);if (xml_entry){ xmlNodeSetPtr nodeset = xml_entry->nodesetval; xmlNodePtr cur; xmlAttrPtr attrPtr; pstOTTData->pstFreIvEpgList = (FREEI_IPTV_EPG_LIST *)GSOS_Malloc(sizeof(FREEI_IPTV_EPG_LIST)*(nodeset->nodeNr)); if (NULL == pstOTTData->pstFreIvEpgList) { return bRetuFlg; } pstOTTData->iEPGTotal = nodeset->nodeNr; for (iIndex=0; iIndex < nodeset->nodeNr; iIndex++) { cur = nodeset->nodeTab[iIndex]; attrPtr = cur->properties; while(NULL != attrPtr) { if (!xmlStrcmp(attrPtr->name, BAD_CAST "start")) { xmlChar* szAttr = xmlGetProp(cur, BAD_CAST "start"); snprintf (pstOTTData->pstFreIvEpgList[iIndex].acStartTime, \ sizeof(pstOTTData->pstFreIvEpgList[iIndex].acStartTime), "%s", szAttr); xmlFree(szAttr); } if (!xmlStrcmp(attrPtr->name, BAD_CAST "stop")) { xmlChar* szAttr = xmlGetProp(cur, BAD_CAST "stop"); snprintf (pstOTTData->pstFreIvEpgList[iIndex].acStopTime, \ sizeof(pstOTTData->pstFreIvEpgList[iIndex].acStopTime), "%s", szAttr); xmlFree(szAttr); } attrPtr = attrPtr->next; } cur = cur->xmlChildrenNode; while (NULL != cur) { if (!xmlStrcmp(cur->name, (const xmlChar *)"title")) { snprintf (pstOTTData->pstFreIvEpgList[iIndex].title, \sizeof(pstOTTData->pstFreIvEpgList[iIndex].title), "%s", \((char*)XML_GET_CONTENT(cur->xmlChildrenNode))); } else if (!xmlStrcmp(cur->name, (const xmlChar *)"desc")) { snprintf (pstOTTData->pstFreIvEpgList[iIndex].desc, \ sizeof(pstOTTData->pstFreIvEpgList[iIndex].desc), "%s",\ ((char*)XML_GET_CONTENT(cur->xmlChildrenNode))); } cur = cur->next; } } xmlXPathFreeObject(xml_entry); bRetuFlg = TRUE;}return bRetuFlg;}
0 0
- 采用libxml2解析xml资源
- 使用Libxml2解析xml
- libxml2解析XML
- libxml2-xml 解析
- libxml2解析xml
- libxml2 解析xml字符串
- libxml2解析xml总结
- libxml2 xmlTextReader 解析xml实例
- libxml2解析xml文件记录
- linux下 libxml2 xml解析
- xml 解析,libxml2的使用
- 如何使用libxml2解析xml
- [Linux C]利用libxml2解析xml文件
- 使用libxml2读取文件解析xml
- libxml2如何解析xml格式的字符串
- xml文件解析--libxml2库函数解释
- [Linux C]利用libxml2解析xml文件
- libxml2解析xml到txt的实例
- POJ Wormholes 3259(最短路)
- Android Cursor类的了解和使用
- Codeforces 14D 求树的直径(网上大多数是DFS于是自己写了个BFS)
- java之网络编程基础
- 排序算法之一 快速排序
- 采用libxml2解析xml资源
- vs2008进行移动开发WINCE时,编译慢的解决方法
- 对拍程序
- java运行时类信息--原理、API以及应用
- 实例学习ansible系列(4)常用模块之command/shell/raw
- IOS开发数据库篇—SQLite模糊查询
- 树的实现Java
- Java 设计模式之单例模式的详解(创建模式)
- NSNotification是同步还是异步?