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 :
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.
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>
J'ai fait ceci dans mon code c++:
Code :
A cette ligne ci:
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; }
Code :
Je cast en unsigned long pour que ça se raccorde avec ma fonction, le problème c'est que ça change ma valeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part AdresseReception=(unsigned long)n->content;
Dans ma fonction j'ai besoin exactement de:
Code :
Le paramètre est un unsigned long
Code : Sélectionner tout - Visualiser dans une fenêtre à part fonction(0xCDA09F9); //(par exemple)
Et ici je fait:
Code :
Et ça ne fonctionne pas a cause du cast qui me modifi ma valeure.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CalculateurXML xpath; fonction(Xpath.getAdresseEmmission());.
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.
Partager