[C++][TinyXML]Problème de balise vide
Bonjour tout le monde.
J'ai un programme écrit en C++ qui transforme un fichier XML en un fichier TXT.
J'ai utilisé TinyXML comme parser.
Le programme me retourne l'erreur suivante:
Citation:
Program received signal SIGSEGV, Segmentation fault.
At D:/xmlToTxt/main1.cpp:224
Program exited with code 030000000005.
Debugger finished with status 0
J'ai vu que dans ma ligne de code 224 est écrit:
Code:
1 2
| TiXmlElement* adresseElement = infoClient->FirstChild("adresse")->ToElement();
TiXmlText* adresse = adresseElement->FirstChild()->ToText(); |
Et quand je suis allé voir côté fichier XML, j'ai remarqué cela:
Code:
1 2 3 4 5 6 7 8
| <infoClient custCode="1.90000007">
<customerCat>Residentiels</customerCat>
<codeBillingAccount>8568622</codeBillingAccount>
<nom>Monsieur Imad_Ing</nom>
<noteAdresse1>14 ZKT SEBOU AP10 AGDAL</noteAdresse1>
<adresse> </adresse>
<quartier/>
<codePostal>10106</codePostal> |
Mes tests: Est ce que le problème de mémoire pourrait venir de l'espace entré à la place de la valeur de la balise Adresse?
J'ai remplacé l'espace par une valeur aléatoire est ça plante plus !!!
Ma question: Est ce que le fait d'avoir un espace à la place du texte dans une balise XML peut causer un problème de segmentation ? Sachant que je code en C++?
Merci d'avance pour vos réponses et remarques.
Imad_Ing
Re:Problème de balise vide
Code:
1 2
| TiXmlElement* adresseElement = infoClient->FirstChild("adresse")->ToElement();
TiXmlText* adresse = adresseElement->FirstChild()->ToText(); |
C'est comme ça que je pointe sur la balise Adresse de mon XML en utilisant TinyXML.
Pourrais-je intégrer un test sur la valeur de la balise avant de la prendre ?
Quelque chose du genre:
Code:
1 2 3 4 5
|
Si je trouve un " ";
Alors je le remplace par "";
Sinon, je prend la valeur tel qu'elle est;
Fsi; |
Imad_Ing
Re: Problème de balise vide
Bonjour,
Je cherche une méthode pour remédier aux éventuels espaces " " trouvés dans une balise de mon fichier XML, et j'ai appliqué ceci:
Code:
1 2 3 4 5 6
| TiXmlElement* adresseElement = infoClient->FirstChild("adresse")->ToElement();
const char* temp = elem->Attribute("adresse");
if temp = " "{
elem->SetAttribute("adresse", "");
}
TiXmlText* adresse = adresseElement->FirstChild()->ToText(); |
C'est la solution que j'ai mis en place pour remplacer un espace " " trouvé dans <adresse> </adresse> par exemple et le remplacer par "".
Ca me retourne une erreur d'incompatibilité de pointeurs! Et je ne sais pas de quoi s'agit il :aie:
Erreur:
Code:
1 2 3 4 5
|
Compiling: main1.cpp
mingw32-g++.exe: -pg and -fomit-frame-pointer are incompatible
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 0 warnings |
Quelqu'un pourrait m'expliquer ou me proposer une autre solution ?
Merci d'avance pour vos remarques et réponses.
Imad