2010-10-04 3 views

Répondre

1

D'accord, j'ai compris comment faire cela. Documentation éparse disponible sur le sujet. Apparemment, j'ai besoin de lancer le SAX2XMLReader que XMLReaderFactory :: createXMLReader() renvoie, à SAX2XMLReaderImpl. Ensuite, je peux enregistrer une implémentation de PSVIHandler sur cette interface. Je dois fournir ma propre implémentation de PSVIHandler, car je n'ai pas trouvé d'implémentation par défaut dans Xerces. Une fois cette implémentation de PSVI enregistrée avec SAX2XMLReaderImpl, je crée un ContentHandler impl et passe le gestionnaire PSVI impl à son constructeur. Ensuite, j'inscris le ContentHandler avec SAX2XMLReaderImpl. Puis, quand je suis en train d'analyser, je peux accéder aux informations de PSVIHandler pour obtenir des informations sur le schéma.

Tout semble très maladroit et l'interface PSVIHandler semble très hostile. Peut-être qu'il y a un meilleur moyen.

Voici un extrait de code:

SAX2XMLReaderImpl* parser = dynamic_cast<SAX2XMLReaderImpl*>(XMLReaderFactory::createXMLReader()); 
    PSVIHandler* pSchemaHandler = new MyPSVIHandler(); 
    DefaultHandler* defaultHandler = new MyXMLHandler(pSchemaHandler); 
    parser->setContentHandler(defaultHandler); 
    parser->setErrorHandler(defaultHandler); 
    parser->setPSVIHandler(pSchemaHandler); 
Questions connexes