XSD classe C++ à l'aide de xsd cxx-arbre de l'analyseur.Méthodes pour ouvrir un fichier xml à partir d'un fichier.

StackOverflow https://stackoverflow.com//questions/22039373

Question

Je suis avec le xsd 3.3.0 Compilateur pour analyser un fichier xsd (xml meilleur ami) fichier de classe C++.(voir le dernier lien)

Le système comand nom est

xsd cxx-arbre (options) fichier.xsd

(+ info http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/)

J'ai vu quelques exemples fournis par codesynthesis où ils analyser un bonjour.document xsd et crée un .hxx et un .cxx fichier très facilement.L' .hxx a une méthode pour ouvrir un document xml la création d'un objet où vous pouvez trouver les différentes parties du xml, vérifier, etc...L' .hxx a un code comme ceci:

// Parse a URI or a local file.
//

::std::auto_ptr< ::hello_t >
hello (const ::std::string& uri,
       ::xml_schema::flags f = 0,
       const ::xml_schema::properties& p = ::xml_schema::properties ());

Il reçoit une chaîne de caractères avec le nom de fichier

chaîne& uri = "bonjour.xsd"

et de créer l'objet que vous utilisez dans la main.cxx.

Donc, je suis en train de faire la même chose avec mon fichier xsd.J'utilise le xsd cxx-arbre compilateur, mais il ne crée pas les méthodes pour "Analyser un URI ou un fichier local.".Alors je ne peux pas créer un objet à partir d'un fichier xml sur mon programme principal.

- Je résoudre certains problèmes de compilation à l'aide de différentes options de codesys documentation du compilateur (http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml).Il y a différentes options sur ce que vous voulez, comment vous voulez le faire, etc...mais je ne trouve pas toutes les options pour activer les méthodes utilisées pour "Analyser un URI ou un fichier local.".

Donner plus d'onformation, le xml xsd documents sont CBML protocole de documents.

Merci pour votre aide!

Était-ce utile?

La solution 2

J'ai trouvé la solution par moi-même!

J'ai utilisé différentes options pour la compilation.J'ai utilisé l'option "bibliothèque d'éléments" et cela a causé que les méthodes "analyser une URI ou un fichier local".n'a pas été créé.

Je supprime cette option et j'ai ajouté "-root-élément-tout" qui crée des méthodes d'analyse pour tous les objets principaux!

Maintenant, mon programme fonctionne!Merci!

Autres conseils

J'utilise ce produit tous les temps.

Voici un exemple de ce que vous essayez de le faire (je pense):

xsd cxx-tree hello.xsd

Qui génère le hello.hxx et la hello.cxx, comme vous l'avez dit.Je pense que là où vous tombez à court de bien comprendre comment utiliser ces fichiers pour charger un fichier XML (par exemple, le chargement d'une "fichier local").

J'aime explicitement indiquer au logiciel où trouver le schéma XSD.Le code suivant ne compile pas mais je l'ai inclus à titre de référence.

void load(const std::string &xml, const std::string &xsd) {
    xml_schema::properties properties;
    properties.no_namespace_schema_location(xsd);
    // or, if you have a specific namespace you want to load, use
    // props.schema_location("which namespace", xsd);
    try {
        std::auto_ptr< ::hello_t> xml_file = hello(xml, 0, props);
        // operate on the xml_file via "->" notation
        std::cout << xml_file->hello() << std::endl;

    } catch (const ::xml_schema::exception &e) {
        std::ostringstream os;
        os << e.what();
        // report the error as you see fit, use os.str() to get the string
    }

}

Assurez-vous de relier le *.cxx fichier de votre *.cpp les fichiers.

Si ce n'est pas ce que tu voulais, laissez-moi savoir dans les commentaires et je peux essayer de vous aider un peu plus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top