Analyse d'un fichier XML avec un schéma DTD sur un chemin relatif
J'ai le code java suivant:
DocumentBuilder db=DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc=db.parse(new File("/opt/myfile"));
Et /opt/myfile
contient quelque chose comme:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE SYSTÈME d'archivage "../../schema/xml/schéma.dtd"> ...
J'obtiens l'erreur suivante:
java.io.FileNotFoundException: /../schema/xml/schéma.dtd (Aucun fichier ou répertoire)
C'est un grand framework java qui utilise un fichier XML produit ailleurs. Je pense que le chemin d'accès relatif est le problème. Je ne pense pas qu'il serait acceptable de modifier le mdc avant la JVM commence (le chemin vient d'un fichier de configuration qui est lu par la JVM elle-même) et je n'ai pas trouvé un moyen de changer le mdc, tandis que la JVM est en cours d'exécution. Comment dois-je analyser ce fichier XML avec la DTD?
source d'informationauteur User1 | 2011-01-18
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'utiliser un EntityResolver de modifier le chemin d'accès de la DTD de sorte qu'il puisse être trouvé. Par exemple:
Si
schema.dtd
est sur votre chemin de classe, vous pouvez simplement utilisergetResourceAsStream
pour la charger, sans spécifier le chemin d'accès complet:Vous pouvez également ignorer la DTD:
http://marcels-javanotes.blogspot.com/2005/11/parsing-xml-file-without-having-access.html
J'ai utilisé la coutume EntityResolver comme dans l'exemple ci-dessus, mais il a encore cherché sur le fichier DTD dans un autre répertoire de base. J'ai donc debuged et puis découvert j'ai besoin de changer d'utilisateur.dir système de la propriété. J'ai donc ajouté cette ligne à mon initialisation de l'application de la méthode et cela fonctionne maintenant.