[Java] Parser XML SAX, validation de DTD interne

J’ai un fichier XML (qui fait référence à un DOCTYPE) que je parse avec SAX de la manière suivante :

this.saxHandler = new CompleteSAX();

SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
// Parse the input
SAXParser saxParser = factory.newSAXParser(); // throws ParserConfigurationException & SAXException
saxParser.parse(new File("config.xml"), saxHandler); // throws FileNotFoundException & IOException & SAXException

Le problème c’est qu’ainsi, dans mon programme, je dois avoir deux fichier, le fichier “config.xml” (normal) mais aussi le “config.dtd”, ce dernier me gène.
Est-il possible de dire à SAX de valider le XML à l’aide d’un DOCTYPE interne ? Genre une String hardcodée dans le programme ?

Salut,
désolé pour le délai je dépile à l’instant.
Plutôt que de “hardcoder” ta DTD, tu met le fichier dtd en ressource dans ton jar, et tu utilise la ressource à partir du ClassLoader courant pour obtenir un IntputStream dessus: le SAXParser accepte d’utiliser un inputStream au lieu d’un “File”.
:slight_smile:


NimporteQuelleClasse.class.getClassLoader().
     getResourceAsStream(fileurl)

Note, tu peux aussi créer un inputStream à partir d’une String si tu veux, mais ça me semble moins correct. :wink:

see:
http://java.sun.com/j2se/1.4.2/docs/api/ja…va.lang.String)

Tu peux aussi utilise une DOCTYPE externe en utilisant une URL

deltree > OK, ça semble donc possible finalement :slight_smile: Faudra juste que j’arrive à faire un .JAR cette fois-ci :slight_smile:

Sans-Nom > Actuellement, j’utilise un DOCTYPE externe (mais pas avec une URL Internet), et c’est ça le problème car ça me fait un fichier en plus…