1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
void DocRequeteGetConChannel(xmlDocPtr doc,struct _condition *ch){
// struct _condition *ch;
//ch=(struct _condition*)malloc(sizeof(struct _condition));
ch->TabCon=(char**)malloc(20*sizeof(char*));
ch->nbrCon=0;
ch->lenCons=0;
int lenConCH;
xmlXPathInit();
xmlXPathContextPtr ctxt = xmlXPathNewContext(doc);
if (ctxt == NULL) {
fprintf(stderr, "Erreur lors de la création du contexte XPath\n");
exit(-1);
}
// Evaluation de l'expression XPath
//***************************************************************************
xmlXPathObjectPtr xpathRes = xmlXPathEvalExpression("/requete/channel[@id][count(display-name)=0]", ctxt);
if (xpathRes == NULL) {
fprintf(stderr, "Erreur sur l'expression XPath\n");
exit(-1);
}
if (xpathRes->type == XPATH_NODESET) {
int i;
for (i = 0; i < xpathRes->nodesetval->nodeNr; i++) {
xmlNodePtr n = xpathRes->nodesetval->nodeTab[i];
lenConCH=4+strlen((char*)n->properties->children->content);
ch->lenCons=ch->lenCons+lenConCH;
ch->TabCon[ch->nbrCon]=(char*)malloc(sizeof(char) *lenConCH);
strcpy(ch->TabCon[ch->nbrCon],"id=");
strcat((char*)ch->TabCon[ch->nbrCon],(char*)n->properties->children->content);
ch->nbrCon=ch->nbrCon+1;
}
}
//printf("/tv/channel[@id][count(display-name)=0]\n");
//***************************************************************************
xpathRes = xmlXPathEvalExpression((xmlChar*)"/requete/channel[count(@id)=0]/display-name[1]", ctxt);
//printf("2\n");
if (xpathRes == NULL) {
fprintf(stderr, "Erreur sur l'expression XPath\n");
exit(-1);
}
if (xpathRes->type == XPATH_NODESET) {
int i;
for (i = 0; i < xpathRes->nodesetval->nodeNr; i++) {
xmlNodePtr n = xpathRes->nodesetval->nodeTab[i];
lenConCH=14+strlen((char*)n->children->content);
ch->lenCons=ch->lenCons+lenConCH;
//printf("malloc%d\n",i);
ch->TabCon[ch->nbrCon]=(char*)malloc(sizeof(char) *lenConCH);
strcpy((char*)ch->TabCon[ch->nbrCon],(const char*)"display-name=");
strcat((char*)ch->TabCon[ch->nbrCon],(char*)n->children->content);
ch->nbrCon=ch->nbrCon+1;
}
}
//printf("/tv/channel[count(@id)!=1]/display-name[1]\n");
//***************************************************************************
xpathRes = xmlXPathEvalExpression("/requete/channel[@id]/display-name[1]", ctxt);
if (xpathRes == NULL) {
fprintf(stderr, "Erreur sur l'expression XPath\n");
exit(-1);
}
if (xpathRes->type == XPATH_NODESET) {
int i;
for (i = 0; i < xpathRes->nodesetval->nodeNr; i++) {
xmlNodePtr n = xpathRes->nodesetval->nodeTab[i];
lenConCH=24+strlen((char*)n->children->content)+strlen((char*)n->parent->properties->children->content);
ch->lenCons=ch->lenCons+lenConCH;
//printf("malloc%d\n",i);
ch->TabCon[ch->nbrCon]=(char*)malloc(sizeof(char) *lenConCH);
strcpy(ch->TabCon[ch->nbrCon],"(display-name=");
strcat((char*)ch->TabCon[ch->nbrCon],(char*)n->children->content);
strcat(ch->TabCon[ch->nbrCon]," and id=");
strcat((char*)ch->TabCon[ch->nbrCon],(char*)n->parent->properties->children->content);
strcat(ch->TabCon[ch->nbrCon],")");
ch->nbrCon=ch->nbrCon+1;
}
}
//printf("/tv/channel[count(@id)]/display-name[1]\n");
// Libération de la mémoire
xmlXPathFreeObject(xpathRes);
xmlXPathFreeContext(ctxt);
} |
Partager