Bonjour,

Je souhaite appliquer deux transformation xpath successivement. L'id�e g�n�rale est la suivante. Avec la premi�re expression je r�cup�re un ensemble de node. Ensuite pour chaque node de mon ensemble j'applique la seconde expression. Mon soucis est la suivant. Lors de la seconde �valuation, le node courant semble ne pas �tre pris en compte, je pense que c'est la ligne
Code : S�lectionner tout - Visualiser dans une fen�tre � part
subCtx->node = xpathNodes->nodesetval->nodeTab[row];
qui pose probl�me. Qu'est ce que vous en pensez ?

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
int xt_parseXmlResult(xmlDocPtr doc, const char *xpath, assoc_arrayc_t expr, arrayc_t *result)
{
    xmlXPathContextPtr xpathCtx = xmlXPathNewContext(doc);
 
    // Register namespaces ...
 
    /*
     * Evaluate main xpath expression
     */
   	xmlXPathObjectPtr xpathNodes = xmlXPathEvalExpression((xmlChar *)xpath, xpathCtx);
 
    /*
     * Now we apply the xpath expressions on each node returned by the first xpath request
     */
    // First loop is on the XML document as we have to create a new context each
    // time we change the document
    int nbDocs = xpathNodes->nodesetval->nodeNr;
 
    for (row = 0; row < nbDocs; row++)
    {
    	xmlXPathContextPtr  subCtx = xmlXPathNewContext(doc);
 
		// Register namespaces ...
 
    	// Update context to use the nodeset related to this row
    	subCtx->node = xpathNodes->nodesetval->nodeTab[row];
 
	    for (col = 0; col < expr.nbItems; col++)
	    {
	        // Evaluate expression
	        xpathRows = xmlXPathEvalExpression((xmlChar *)expr.itemList[col].val, subCtx);
 
	        result->data[(row + 1) * result->nbCols + col] = strdup((char *)xmlXPathCastToString(xpathRows)); 
	        xmlXPathFreeObject(xpathRows);
	    }
	    xmlXPathFreeContext(subCtx);
	    subCtx = NULL;
    }
 
    xmlFreeDoc(doc); 
    xmlXPathFreeContext(xpathCtx);
    xmlXPathFreeObject(xpathNodes);
    return 0;
}
ChaF