#include "xml.h"
#include <string.h>
/******************************
* Vertical & Horizontal MENU *
******************************/
int xml_get_nb_horizontal_items(){
int nb=0;
xmlDocPtr doc;
xmlNodePtr cur, sub;
if(!(doc = xmlParseFile(MENU_XML_FILE))){
fprintf(stderr, "Document not parsed successfully.\n");
xmlFreeDoc(doc);
return(-1);
}
if(!(cur = xmlDocGetRootElement(doc))){
fprintf(stderr, "Document has no root element.\n");
xmlFreeDoc(doc);
return( -1 );
}
if(xmlStrcmp(cur->name, (const xmlChar *) "all_items")){
fprintf( stderr, "Document of the wrong type, root node != data\n" );
xmlFreeDoc(doc);
return(-1);
}
sub = cur->children;
while( sub != NULL ){
if( (!xmlStrcmp(sub->name, (const xmlChar *)"item" ) ) ){
nb++;
}
sub = sub->next;
}
xmlFreeDoc( doc );
return nb;
}
char* xml_get_horizontal_item_name(int i){
i++;
int nb = 0;
char* txt;
xmlDocPtr doc;
xmlNodePtr cur, sub;
doc = xmlParseFile(MENU_XML_FILE);
cur = xmlDocGetRootElement(doc);
sub = cur->children;
while( sub != NULL ){
if( (!xmlStrcmp(sub->name, (const xmlChar *)"item" ) ) ){
nb++;
if (nb == i){
txt = (char*)xmlGetProp( sub,(xmlChar*)"name");
xmlFreeDoc( doc );
return(txt);
}
}
sub = sub->next;
}
xmlFreeDoc( doc );
return NULL;
}
char* xml_get_large_image_path(int i){
i++;
int nb = 0;
char* txt;
xmlDocPtr doc;
xmlNodePtr cur, sub;
xmlNodePtr item;
doc = xmlParseFile(MENU_XML_FILE);
cur = xmlDocGetRootElement(doc);
sub = cur->children;
while( sub != NULL ){
if( (!xmlStrcmp(sub->name, (const xmlChar *)"item" ) ) ){
nb++;
if (nb == i){
item = sub->children;
while(item != NULL){
if( (!xmlStrcmp(item->name, (const xmlChar *)"large_image"))){
txt = (char*)xmlNodeListGetString(doc, item->xmlChildrenNode, 1);
xmlFreeDoc( doc );
return(txt);
}
item = item->next;
}
}
}
sub = sub->next;
}
xmlFreeDoc( doc );
return NULL;
}
char* xml_get_small_image_path(int i){
i++;
int nb = 0;
char* txt;
xmlDocPtr doc;
xmlNodePtr cur, sub;
xmlNodePtr item;
doc = xmlParseFile(MENU_XML_FILE);
cur = xmlDocGetRootElement(doc);
sub = cur->children;
while( sub != NULL ){
if( (!xmlStrcmp(sub->name, (const xmlChar *)"item" ) ) ){
nb++;
if (nb == i){
item = sub->children;
while(item != NULL){
if( (!xmlStrcmp(item->name, (const xmlChar *)"small_image"))){
txt = (char*)xmlNodeListGetString(doc, item->xmlChildrenNode, 1);
xmlFreeDoc( doc );
return(txt);
}
item = item->next;
}
}
}
sub = sub->next;
}
xmlFreeDoc( doc );
return NULL;
}
char* xml_get_vertical_item_name(char* item_name, int sub_menu_item){
sub_menu_item++;
int nb = 0;
char* txt;
xmlDocPtr doc;
xmlNodePtr cur, sub;
xmlNodePtr item;
doc = xmlParseFile(MENU_XML_FILE);
cur = xmlDocGetRootElement(doc);
sub = cur->children;
while( sub != NULL ){
if( (!xmlStrcmp(sub->name, (const xmlChar *)"item" ) ) ){
txt = (char*)xmlGetProp( sub,(xmlChar*)"name");
if(strcmp(txt,item_name) == 0){
item = sub->children;
while(item!=NULL){
if( (!xmlStrcmp(item->name, (const xmlChar *)"sub_menu_item"))){
nb++;
if(nb == sub_menu_item){
txt = (char*)xmlGetProp( item,(xmlChar*)"name");
xmlFreeDoc( doc );
return(txt);
}
}
item = item->next;
}
}
}
sub = sub->next;
}
xmlFreeDoc( doc );
return NULL;
}
char* xml_get_vertical_item_action_type(char* item_name, int sub_menu_item){
sub_menu_item++;
int nb = 0;
char* txt;
xmlDocPtr doc;
xmlNodePtr cur, sub;
xmlNodePtr item, script;
doc = xmlParseFile(MENU_XML_FILE);
cur = xmlDocGetRootElement(doc);
sub = cur->children;
while( sub != NULL ){
if( (!xmlStrcmp(sub->name, (const xmlChar *)"item" ) ) ){
txt = (char*)xmlGetProp( sub,(xmlChar*)"name");
if(strcmp(txt,item_name) == 0){
item = sub->children;
while(item!=NULL){
if( (!xmlStrcmp(item->name, (const xmlChar *)"sub_menu_item"))){
nb++;
if(nb == sub_menu_item){
script = item->children;
while(script!=NULL){
if( (!xmlStrcmp(script->name, (const xmlChar *)"action"))){
txt = (char*)xmlGetProp( script,(xmlChar*)"type");
xmlFreeDoc( doc );
return(txt);
}
script = script->next;
}
}
}
item = item->next;
}
}
}
sub = sub->next;
}
xmlFreeDoc( doc );
return NULL;
}
char* xml_get_vertical_item_action(char* item_name, int sub_menu_item){
sub_menu_item++;
int nb = 0;
char* txt;
xmlDocPtr doc;
xmlNodePtr cur, sub;
xmlNodePtr item, script;
doc = xmlParseFile(MENU_XML_FILE);
cur = xmlDocGetRootElement(doc);
sub = cur->children;
while( sub != NULL ){
if( (!xmlStrcmp(sub->name, (const xmlChar *)"item" ) ) ){
txt = (char*)xmlGetProp( sub,(xmlChar*)"name");
if(strcmp(txt,item_name) == 0){
item = sub->children;
while(item!=NULL){
if( (!xmlStrcmp(item->name, (const xmlChar *)"sub_menu_item"))){
nb++;
if(nb == sub_menu_item){
script = item->children;
while(script!=NULL){
if( (!xmlStrcmp(script->name, (const xmlChar *)"action"))){
txt = (char*)xmlNodeListGetString(doc, script->xmlChildrenNode, 1);
xmlFreeDoc( doc );
return(txt);
}
script = script->next;
}
}
}
item = item->next;
}
}
}
sub = sub->next;
}
xmlFreeDoc( doc );
return NULL;
}
int xml_get_nb_vertical_items(char* item_name){
int nb = 0;
char* txt;
xmlDocPtr doc;
xmlNodePtr cur, sub;
xmlNodePtr item;
doc = xmlParseFile(MENU_XML_FILE);
cur = xmlDocGetRootElement(doc);
sub = cur->children;
while( sub != NULL ){
if( (!xmlStrcmp(sub->name, (const xmlChar *)"item" ) ) ){
txt = (char*)xmlGetProp( sub,(xmlChar*)"name");
if(strcmp(txt,item_name) == 0){
item = sub->children;
while(item!=NULL){
if( (!xmlStrcmp(item->name, (const xmlChar *)"sub_menu_item")))
nb++;
item = item->next;
}
return nb;
}
}
sub = sub->next;
}
xmlFreeDoc( doc );
return 0;
}
menu xml_load_menu(){
int i, j;
menu menu_categories;
int nb_horizontal_items = xml_get_nb_horizontal_items();;
menu_categories = malloc( nb_horizontal_items * sizeof( struct menu_category ) );
memset( menu_categories, 0, nb_horizontal_items * sizeof( struct menu_category ) );
for(i=0 ; i < nb_horizontal_items; i++ ){
int nb_vertical_items = 0;
menu_categories[i].name = xml_get_horizontal_item_name(i);
menu_categories[i].icon.large = xml_get_large_image_path(i);
menu_categories[i].icon.small = xml_get_small_image_path(i);
nb_vertical_items = xml_get_nb_vertical_items(menu_categories[i].name);
menu_categories[i].items = malloc( nb_vertical_items * sizeof( struct menu_item ) );
for(j=0;j<nb_vertical_items;j++){
menu_categories[i].items[j].name = xml_get_vertical_item_name(menu_categories[i].name,j);
if(strcmp(xml_get_vertical_item_action_type(menu_categories[i].name,j),"script") == 0)
menu_categories[i].items[j].action_type = PLX_SCRIPT;
else
menu_categories[i].items[j].action_type = PLX_BUILTIN;
menu_categories[i].items[j].action = xml_get_vertical_item_action(menu_categories[i].name,j);
}
}
return menu_categories;
}
/******************************
* Remote Control settings *
******************************/
int xml_get_nb_remotes(){
int nb=0;
xmlDocPtr doc;
xmlNodePtr cur, sub;
if(!(doc = xmlParseFile(REMOTE_XML_FILE))){
fprintf(stderr, "Document not parsed successfully.\n");
xmlFreeDoc(doc);
return(-1);
}
if(!(cur = xmlDocGetRootElement(doc))){
fprintf(stderr, "Document has no root element.\n");
xmlFreeDoc(doc);
return( -1 );
}
if(xmlStrcmp(cur->name, (const xmlChar *) "remotes")){
fprintf( stderr, "Document of the wrong type, root node != data\n" );
xmlFreeDoc(doc);
return(-1);
}
sub = cur->children;
whi
没有合适的资源?快使用搜索试试~ 我知道了~
xml-channel.zip_Boxes
共8个文件
c:3个
h:3个
old:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 42 浏览量
2022-09-22
19:16:28
上传
评论
收藏 6KB ZIP 举报
温馨提示
xml based management of middleware for settop boxes
资源推荐
资源详情
资源评论
收起资源包目录
xml-channel.zip (8个子文件)
xml_files
xml.c 20KB
remote.h 1KB
menu.h 442B
xml.h 2KB
exemple.c 2KB
Makefile 330B
exemple.c.old 2KB
exemple_with_printf.c 2KB
共 8 条
- 1
资源评论
周楷雯
- 粉丝: 80
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功