Bonjour à tous,
Je me retrouve dans une petite impasse, et je vous serai ravi que vous m'apportiez un zeste de vos lumières. Voila je dispose d'un fichier Xml décrivant une gallerie video :
J'aimerai donc de ce fichier, extraire la valeur de la balise <title> de la video dont la balise <video>/<stream>/<url> vaudrait vid#2.flv par exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?xml version="1.0" encoding="utf-8"?> <gallery version="2.1"> <video _mngid="1"> <title>Video #1</title> <thumb> <url>img#1.jpg</url> </thumb> <video> <stream bitrate="64"> <url>vid#1.flv</url> </stream> </video> </video> <video _mngid="2"> <title>Video #2</title> <thumb> <url>img#2.jpg</url> </thumb> <video> <stream bitrate="64"> <url>vid#2.flv</url> </stream> </video> </video> </gallery>
J'ai donc écrit ce bout de code en C avec la libxml2 :
C'était l'expression Xpath qui me semblait la plus logique (désolé pour mon noobisme en Xpath), mais voila vous l'aurez compris au lieu de ne m'afficher le titre voulu (Video #2), ce code m'affiche la liste de toutes les videos comme si il ne prenait en compte que la premiere partie de la query à savoir : "//gallery/video/title/text()".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 ... xmlXPathObjectPtr xpathres = xmlXPathEvalExpression("//gallery/video/title/text()[../video/stream/url/text()[.='vid#2.flv']]", xpathctx); if (xpathres && (xpathres->type == XPATH_NODESET)) { for (i = 0; i < xpathres->nodesetval->nodeNr; i++) { xmlNodePtr n = xpathres->nodesetval->nodeTab[i]; if (n->type == XML_TEXT_NODE || n->type == XML_CDATA_SECTION_NODE) printf("- %s\n", n->content); } } else return -1; ...
Voila donc j'en appelle a votre aide afin de me corriger dans la formulation de cette query.. En esperant avoir été clair.. Merci !
Partager