Domanda

Sto usando il compilatore XSD 3.3.0 per analizzare un file XSD (XML Best Friend) alla classe C ++. (Vedi ultimo webking)

Il nome COMAND è

.

XSD CXX-Tree (Opzioni) File.xsd

(+ info http://www.codesynthesis.com/ Progetti / XSD / Documentazione / CXX / Tree / Guida / )

Ho visto alcuni esempi forniti dalla codicivinthesis dove analizzano un documento ciao.xsd e crea molto facilmente un file .hxx e un file .cxx. Il .hxx ha un metodo per aprire un documento XML creando un oggetto in cui è possibile trovare le parti diverse del XML, controllalo, ecc ... Il .hxx ha un codice come questo:

// 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 ());
.

Ricevi una stringa con il nome del file

.

string & uri="hello.xsd"

e crea l'oggetto che si utilizza nel main.cxx.

Quindi, sto cercando di fare lo stesso con il mio file XSD. Io uso il compilatore XSD CXX-Tree ma non crea i metodi per "analizzare un URI o un file locale". Quindi non posso creare un oggetto da un file XML sul mio programma principale.

risolto alcuni problemi di compilazione utilizzando le diverse opzioni dalla documentazione del compilatore di Codesys ( http: / /www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml ). Ci sono opzioni diverse su cosa vuoi compilare, come vuoi farlo, ecc ... Ma non riesco a trovare nessuna opzione per abilitare i metodi usati per "analizzare un URI o un file locale.". < / P >.

Dare più informazioni, i documenti XML-XSD sono documenti del protocollo CBML.

Grazie per il tuo aiuto!

È stato utile?

Soluzione 2

Ho trovato la soluzione da solo!

Ho usato diverse opzioni per la compilazione.Ho usato l'opzione "- -root-element biblioteca" e ha causato che i metodi "analizzano un URI o un file locale".non è stato creato.

Elimina questa opzione e ho aggiunto "--root-element-all" che creano metodi Parse per tutti gli oggetti dei principi!

Ora il mio programma funziona!Grazie!

Altri suggerimenti

Io uso questo prodotto tutto il tempo.

Ecco un esempio di ciò che stai cercando di fare (penso):

xsd cxx-tree hello.xsd

che genera il hello.hxx e il hello.cxx, come hai detto.Penso che in cui stai cadendo corto è la comprensione del modo in cui utilizzare questi file per caricare un file XML (ad esempio, caricando un "file locale").

Mi piace esplicitamente dire al software in cui trovare lo schema XSD.Il seguente codice non si compilerà ma l'ho incluso per riferimento.

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
    }

}
.

Assicurati di collegare il file *.cxx ai file *.cpp.

Se questo non è quello che volevi, fammi sapere nei commenti e posso provare ad aiutarti ancora un po '.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top