ok, désolé pour le manque de précision.
Pour parser, on utilise, à priori xerces 3.1, et la ligne suivante :
auto_ptr<CityModelType> iCity( CityModel(_fileXML), xml_schema::flags::keep_dom) );
J'ai également associé les flags dont_validate & dont_initialize selon toutes les configurations possibles.
Je suis aussi rentré dans le code du parseur afin de voir l'implémentation de CityModel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| ::std::auto_ptr< ::core::CityModelType >
CityModel (const ::std::string& u,
::xml_schema::flags f,
const ::xml_schema::properties& p)
{
::xsd::cxx::xml::auto_initializer i (
(f & ::xml_schema::flags::dont_initialize) == 0,
(f & ::xml_schema::flags::keep_dom) == 0);
::xsd::cxx::tree::error_handler< char > h;
::xml_schema::dom::auto_ptr< ::xercesc::DOMDocument > d (
::xsd::cxx::xml::dom::parse< char > (
u, h, p, f));
h.throw_if_failed< ::xsd::cxx::tree::parsing< char > > ();
::std::auto_ptr< ::core::CityModelType > r (
::core::CityModel (
d, f | ::xml_schema::flags::own_dom, p));
return r;
} |
Et un exemple de la fonction parse pour les éléments xAL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| void Country::
parse (::xsd::cxx::xml::dom::parser< char >& p,
::xml_schema::flags f)
{
for (; p.more_elements (); p.next_element ())
{
const ::xercesc::DOMElement& i (p.cur_element ());
const ::xsd::cxx::xml::qualified_name< char > n (
::xsd::cxx::xml::dom::name< char > (i));
// CountryName
//
if (n.name () == "CountryName" && n.namespace_ () == "urn:oasis:names:tc:ciq:xsdschema:xAL:2.0")
{
::std::auto_ptr< CountryName_type > r (
CountryName_traits::create (i, f, this));
this->CountryName_.push_back (r);
continue;
} |
Le code étant au départ généré par xsd est plutôt complexe et je ne maitrise (pas encore )tout
Partager