Xerces C++ - Charger, lire et enregistrer, les solutions de rechange?
Je suis à la recherche d'un tutoriel pour charger un fichier XML, le lire, le modifier, et enfin l'enregistrer avec le C++. Je suis sous Linux Ubuntu et essayé d'utiliser Xerces. Avec Google, et beaucoup de temps, je n'ai pu charger un Fichier XML:
#include <xercesc/parsers/XercesDOMParser.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/sax/HandlerBase.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/util/PlatformUtils.hpp>
#include <iostream>
using namespace std;
using namespace xercesc;
int main (int argc, char* args[]) {
try {
XMLPlatformUtils::Initialize();
}
catch (const XMLException& toCatch) {
char* message = XMLString::transcode(toCatch.getMessage());
cout << "Error during initialization! :\n"
<< message << "\n";
XMLString::release(&message);
return 1;
}
XercesDOMParser* parser = new XercesDOMParser();
parser->setValidationScheme(XercesDOMParser::Val_Always);
parser->setDoNamespaces(true); //optional
ErrorHandler* errHandler = (ErrorHandler*) new HandlerBase();
parser->setErrorHandler(errHandler);
const char* xmlFile = "demo.xml";
try {
parser->parse(xmlFile);
}
catch (const XMLException& toCatch) {
char* message = XMLString::transcode(toCatch.getMessage());
cout << "Exception message is: \n"
<< message << "\n";
XMLString::release(&message);
return -1;
}
catch (const DOMException& toCatch) {
char* message = XMLString::transcode(toCatch.msg);
cout << "Exception message is: \n"
<< message << "\n";
XMLString::release(&message);
return -1;
}
catch (...) {
cout << "Unexpected Exception \n" ;
return -1;
}
DOMNode* docRootNode;
// DOMNode* aNode;
DOMDocument* doc;
doc = parser->getDocument();
docRootNode = doc->getDocumentElement();
cout << docRootNode->getAttributes() << endl; //returns Hex
delete parser;
delete errHandler;
return 0;
}
Comment je peux lire un de manipuler le fichier XML et enfin l'enregistrer? Est-il d'autres bibliothèques? (J'ai essayé tinyxml mais les fichiers renvoie des erreurs, quand je veux compiler)
J'espère que vous utilisez le nouveau Xerces 3.* l'ancien 2.7/2.8 est d'avoir des fuites de mémoire tous sur la place
OriginalL'auteur | 2010-01-24
Vous devez vous connecter pour publier un commentaire.
Un Échantillon pour l'Enregistrement de xerces DOMDocument. L'enregistrement d'un Document avec
voir Exemple de code http://xerces.apache.org/xerces-c/domprint-2.html
Et un exemple pour le Filtre de mise en œuvre. Vous pouvez le trouver dans DOMPrint exemple.
OriginalL'auteur kneu
LibXML++ semble être la meilleure pour C++. Fonctionnalité-sage, il est très complet, y compris XPath, charset conversions (par Glibmm) et tout ce que vous attendez dans une bibliothèque XML. Il utilise traditionnel des DOM et SAX Api, qui compte comme un pro ou un con en fonction de qui vous demandez. Un problème possible est que les dépendances de la bibliothèque sont très lourds (en raison de l'utilisation de Glibmm). Pourtant, il semble être le seul décent bibliothèque XML en C++.
http://libxmlplusplus.sourceforge.net/docs/manual/html/index.html
TinyXML ne pas analyser XML selon le cahier des charges, donc je vous conseille de contre elle, même si elle fonctionne pour les documents simples.
OriginalL'auteur Tronic
L'échantillon CreateDOMDocument qui vient avec Xerces vous montre comment ajouter des nœuds etc. pour un document DOM. Le code que vous avez jusqu'à présent crée le document, de sorte que vous devez adapter le code dans le deuxième exemple pour ajouter des nœuds, des attributs, etc.
Notez également que lorsque vous dites:
la getAttributes fonction retourne une collection d'attributs, vous devez appliquer plus de Xerces fonctions à la collection pour obtenir de l'information contenue.
Notez que si vous voulez extraire un sous-ensemble des données dans e fichier XML, il peut être plus facile d'utiliser un événement piloté par le parser SAX (Xerces comprend l'un de ces) plutôt que de la construction et de la marche complet d'un document DOM.
OriginalL'auteur
Si vous voulez voir un exemple de la façon de le faire à l'aide de Xerces-C++, découvrez ce code:
http://libprf1.tigris.org/files/documents/1338/13256/libprf1-0.1R3.tar.gz
Je l'ai écrit il y a longtemps comme un projet universitaire. C'est très probablement basé sur une version obsolète de Xerces-C++, mais je ne pense pas que l'API a changé trop de problème. Il aura au moins vous donner une idée.
OriginalL'auteur Andrei Sosnin
Le lien suivant est un bon tutoriel qui montrent les bases pour savoir comment lire un fichier XML et d'analyser avec XERCES.
http://www.yolinux.com/TUTORIALS/XML-Xerces-C.html
Quand cela est fait, la XERCES API devrait être suffisant pour de nouvelles opérations:
http://xerces.apache.org/xerces-c/apiDocs-2/classes.html
Pour l'écriture (serialize) le document, l'utilisateur de la classe DOMWriter
http://xerces.apache.org/xerces-c/apiDocs-2/classDOMWriter.html#a0ddcef5fed6b49e03e53334fedca4b2
OriginalL'auteur Adrian Maire