Pages : 1
#1 Le 15/03/2008, à 04:34
- jalelouss
[Résolu] C++ et xercesc
Salut tout le monde , j'ai un ptit probleme avec xercesc ,
en fait voila un type de fichier xml :
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<personne>
<nom>Nemarre</nom>
<prenom>Jean</prenom>
</personne>
et mon probleme ce que quand je veux reecuperer la valeur de nom , le compilateur m'affiche #text
j'ai pas pu avoir une solution pour en faire
qui peut m'aider et me donner un bout de code afin de selectionner la valeur du nom ,
ben je vous donne mon code que j'ai fait et qui génère #text :
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/parsers/AbstractDOMParser.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/parsers/XercesDOMParser.hpp>
#include <xercesc/framework/StdOutFormatTarget.hpp>
#include <xercesc/framework/LocalFileFormatTarget.hpp>
#include <string>
#include <iostream>
#include <string>
#include <cstring>
#include <vector>
#include <iostream>
#include <sstream>
#include "ErrReporter.hpp"
XERCES_CPP_NAMESPACE_USE
using namespace std;
int main(int argc, char **argv) {
string fichier="fichier3.xml";
// Initialisation du parser
try {
XMLPlatformUtils::Initialize();
}
catch (const XMLException& err) {
cerr << "Erreur pendant l'initialisation de Xerces-C++ :\n"
<< XMLString::transcode(err.getMessage())
<< endl;
return 2;
}
// Faire en sorte que le parser DOM renvoie tous les codes d'erreurs
//AbstractDOMParser::ValSchemes valScheme = AbstractDOMParser::Val_Auto;
// Instancie le parser DOM
XercesDOMParser *parser = new XercesDOMParser;
// Instancie un ErrorHandler et le lie au parser
ErrReporter *errHandler = new ErrReporter();
parser->setErrorHandler(errHandler);
DOMDocument *doc=0;
// Parse le fichier XML et récupère le temps mis pour le parsing
try {
parser->resetDocumentPool();
parser->parse(fichier.c_str());
parser->setDoNamespaces(true);
doc = parser->getDocument();
}
// Gestion des exceptions possibles pendant le parsing
// Exception XML
catch (const XMLException& err) {
cerr << "Erreur XML pendant le parsing du fichier : " <<fichier << "\n"
<< "Exception XML : \n"
<< XMLString::transcode(err.getMessage()) << "\n" << endl;
}
// Exception DOM
catch (const DOMException& err) {
cerr << "Erreur DOM pendant le parsing du fichier : " << fichier << "\n"
<< "Code d'erreur DOM : " << err.code << "\n" << endl;
cerr << "Exception DOM : " << "\n" << endl;
}
// Autre exception
catch (...) {
cerr << "Erreur inattendue durant le parsing du fichier : "
<< fichier << "\n" << endl;
}
if(doc && !errHandler->fSawErrors) {
// Affiche les éléments du fichier XML
DOMElement *repertoire = parser->getDocument()->getDocumentElement();
DOMNode *personne ;
DOMNode *aux=repertoire;
cout << XMLString::transcode(aux->getNodeName()) << "\n" ;
personne=aux;
if (personne == NULL )
{
cout <<"NULL";
}
else
{
cout <<"NOT NULL \n";
DOMElement* nom =(DOMElement*) personne->getFirstChild();
if (nom ==NULL)
{
cout <<"nom NULL ";
}
else
cout << XMLString::transcode(nom->getNodeName()) << "\n" ;
//meme le NodeName me donne #text , je sais pas koi faire
}
}
}
ben ce que je voulais non pas le nom du noeud mais sa valeur,
meme un indice peut m'aider
Hors ligne
#2 Le 16/03/2008, à 03:46
- jalelouss
Re : [Résolu] C++ et xercesc
Ok j'ai trouvé une solution qui n'est pas pratique , pour les concernés je vous donne un lien tres utile http://www.developpez.net/forums/showthread.php?t=7561
Hors ligne
Pages : 1