Parse un XML contenant une DTD n'existant pas
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:
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:
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 ?