Bonjour a tous,

Voila j'explique: j'ai installé la librairie libxml2. Que j'utilise en C++.
Et je veux parser un fichier XML et récuperer des informations.
J'ai créé un fichier XML.

Code :
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
<ParamEcu>
	<ECUTR2Info>
		<EcuName>TR2</EcuName>
		<AdresseEmmission>0xCDA04F9</AdresseEmmission>
		<AdresseReception>0xCDAF904</AdresseReception>
		<SeedValue>2F89</SeedValue>
	</ECUTR2Info>
	<ECUTR3Info>
		<EcuName>TR3</EcuName>
		<AdresseEmmission>0xCDA09F9</AdresseEmmission>
		<AdresseReception> 0xCDAF909</AdresseReception>
		<SeedValue>2F89</SeedValue>
	</ECUTR3Info>
	<ECUSFAInfo>
		<EcuName>SFA</EcuName>
		<AdresseEmmission>0xCDA15F9</AdresseEmmission>
		<AdresseReception>0xCDAF915</AdresseReception>
		<SeedValue>2DAB</SeedValue>
	</ECUSFAInfo>
</ParamEcu>
Enfaite ce que je veux c'est récuperer a chaque fois les information EcuName, AdresseEmmission et AdresseReception en format unsigned long. Car la fonction qui utilisera ces paramètres es veux en unsigned long. Et ça je ne peux le changer.

J'ai fait ceci dans mon code c++:

Code :
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
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
unsigned long CalculateurXML::getAdresseReception()
{
   	// Initialisation de l'environnement XPath
	xmlXPathInit();
	xmlDocPtr doc;
	int j=0;
	xmlChar *pxpathEcuAdresseReception;
	//Chemin des informations dans le XML TR2
	if (ptrCRecuperation_CalculateursDlg->calculo == TR2)
	{
		pxpathEcuAdresseReception = (xmlChar*) "/ParamEcu/ECUTR2Info/AdresseReception/text()";
	}
	//Chemin des informations dans le XML TR3
	else if (ptrCRecuperation_CalculateursDlg->calculo == TR3)
	{
		pxpathEcuAdresseReception = (xmlChar*) "/ParamEcu/ECUTR3Info/AdresseReception/text()";
	}
	//Chemin des informations dans le XML SFA
	else if (ptrCRecuperation_CalculateursDlg->calculo == SFA)
	{
		pxpathEcuAdresseReception = (xmlChar*) "/ParamEcu/ECUSFAInfo/AdresseReception/text()";
	}
	xmlXPathObjectPtr xpathRes; 
	int i;
 
	// Ouverture du fichier XML
    doc = xmlParseFile("ECU.xml");
    if (doc == NULL) 
	{
        fprintf(stderr, "Document XML invalide\n");
        //return EXIT_FAILURE;
    }
 
	// Création du contexte
	xmlXPathContextPtr ctxt = xmlXPathNewContext(doc); // doc est un xmlDocPtr 
	if (ctxt == NULL) 
	{
		fprintf(stderr, "Erreur lors de la création du contexte XPath\n");
		xmlFreeDoc(doc); 
		exit(-1);
	}
 
 
		// Evaluation de l'expression XPath
		xpathRes = xmlXPathEvalExpression(pxpathEcuAdresseReception, ctxt);
		if (xpathRes == NULL) 
		{
			fprintf(stderr, "Erreur sur l'expression XPath\n");
			exit(-1);
		}
 
		// Manipulation du résultat
		if (xpathRes->type == XPATH_NODESET) 
		{
			for (i = 0; i < xpathRes->nodesetval->nodeNr; i++) 
			{
				//n noeud dans lequel on est
				xmlNodePtr n = xpathRes->nodesetval->nodeTab[i];
				if (n->type == XML_TEXT_NODE || n->type == XML_CDATA_SECTION_NODE) 
				{
					AdresseReception=(unsigned long)n->content;
				}
			}
		}
 
	// Libération de la mémoire
	xmlXPathFreeObject(xpathRes);
	xmlXPathFreeContext(ctxt);
	xmlFreeDoc(doc);
	return AdresseReception;
}
A cette ligne ci:

Code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
AdresseReception=(unsigned long)n->content;
Je cast en unsigned long pour que ça se raccorde avec ma fonction, le problème c'est que ça change ma valeur
Dans ma fonction j'ai besoin exactement de:

Code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
fonction(0xCDA09F9); //(par exemple)
Le paramètre est un unsigned long

Et ici je fait:
Code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
CalculateurXML xpath;
fonction(Xpath.getAdresseEmmission());.
Et ça ne fonctionne pas a cause du cast qui me modifi ma valeure.

Je ne sais pas si vous avez compris, si je susi assezclair en toutcsa je ne sais pas si l'erreur vient de mon fichier xml ou du C++...

Merci en tout cas de m'avoir lu.