LibXML2:Paser un fichier XML en C++ (problèmes spécifiques)
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:
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:
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:
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:
fonction(0xCDA09F9); //(par exemple)
Le paramètre est un unsigned long
Et ici je fait:
Code :
Code:
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.
À méditer avant toute considération
Tout compte fait, question prioritaire…
Tu veux faire du C ou du C++ ?