libxml2 & Expression XPath
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 :
Code:
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'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.
J'ai donc écrit ce bout de code en C avec la libxml2 :
Code:
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;
... |
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()".
Voila donc j'en appelle a votre aide afin de me corriger dans la formulation de cette query.. En esperant avoir été clair.. Merci !