Bonsoir à tous
Je cherche à savoir s'il y a un moyen de valider un document XML qui n'a pas de declaration DOCTYPE. Je connais la DTD à associer au fichier XML (je l'ai en local) mais je ne parviens pas à trouver de solution.
L'un de vous aurait-il une idée ?
Merci.
# idée
Posté par TImaniac (site web personnel) . Évalué à 2.
[^] # Re: idée
Posté par figus . Évalué à 1.
Qqn m'aurait posé cette question, j'aurais répondu de la même manière. Dans un 1er temps.
Ensuite, j'aurais fait une réponse sérieuse ;-)
[^] # Re: idée
Posté par TImaniac (site web personnel) . Évalué à 2.
[^] # Re: idée
Posté par figus . Évalué à 1.
Avant de me lancer dans cette solution, que je ne trouve effectivement pas élégante, je cherchais surtout à savoir s'il y avait mieux.
Quant à la simplicité et la rapidité de la mise en oeuvre, c'est vite dit.
En fait, les XML que je reçois sont susceptibles d'avoir une déclaration DOCTYPE ou pas. Donc c'est un peu chiant à gérer.
Ne me demande pas pourquoi c'est comme ça, je n'ai pas la maitrise de cette partie là :-(
[^] # Re: idée
Posté par TImaniac (site web personnel) . Évalué à 2.
[^] # Re: idée
Posté par B r u n o (site web personnel) . Évalué à 1.
Plus bas ils expliquent comment faire l'association :
Il doit y avoir des options equivalentes pour un DOMParser. Il faut que ton implémentation du parseur supporte la propriété.
Voila, en espérant que cela t'aide.
Bon courage.
[^] # Même problème
Posté par ppost . Évalué à 1.
J'ai essayé la solution donnée ci dessus, mais j'obtiens un problème lors de l'appel de la méthode setProperty de la manière suivante :
setProperty( "http://java.sun.com/xml/jaxp/properties/schemaSource", new File("monFichierDtd"));
Je dois sûrement mal appeler cette méthode, mais je n'ai pas reçu à trouver de doc sur le net. Je ne sais pas exactement quelle propriété je dois initialiser...
Avez vous de nouvelles pistes ?
[^] # Re: Même problème
Posté par figus . Évalué à 1.
C'est assez facile à faire, mais il y a une contrainte : ton XML doit avoir une déclaration DOCTYPE. Peu importe ce qu'elle contient, mais il doit y en avoir une.
Voici donc ce que j'ai fait -- en espérant que ça corresponde à que tu cherches.
Mon appli reçoit des XML validant différentes DTD. Je sais dire quelle DTD s'applique à tout XML reçu (c'est impératif pour la suite).
Pour parvenir à tes fins, il faut implémenter un EntityResolver dans lequel tu associes dynamiquement la bonne DTD. L'EntityResolver (va voir la javadoc qui va bien) est utilisé par ton parser XML en phase "pré", c'est-à-dire avant même de parser ton XML. Le but étant d'instancier les entités présentes dans ton XML.
Voici mon implémentation d'EntityResolver (que j'ai appelé DTDResolver) :
A utiliser de cette manière (j'utilise JDOM donc tu pourrais avoir à l'adapter) :
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.