Bonjour

Pour un projet sur lequel je travail, je doit pouvoir effectuer les opérations suivantes :
- Charger un modèle de fichier XML (c'est un fichier XML)
- Effectuer quelques modifications
- Pouvoir l'enregistrer à un endroit donné.

Le problème que je rencontre vient du fait que mon application (sous Windows) manipule un fichier qui doit être utilisé sous LINUX, et dont la DTD doit être en chemin absolu. Cette DTD doit être absolument être présente dans le fichier générer, conformément à ce qui est présent dans le modèle XML. Je ne peux pas préjuger du contenu de ce modèle.

Si j'effectue les opérations suivantes :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(file);
le parser se plaint comme quoi il ne trouve pas la DTD (setValidating(false) n'a pas l'air de faire ce que je souhaite).

Je peux obtenir un parsing correct en ajoutant ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
builder.setEntityResolver(new EntityResolver()
{
    @Override
    public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException
    {
        return new InputSource(new java.io.StringReader(""));
    }
});
avant le parse. Oui mais... je perd la DTD lors de la sauvegarde de mon document.

Voyez vous une solution ?