Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3317 connectés 

 


Dernière réponse
Sujet : [XML / Java] DTD pas trouve = pas possible de parser?
benou ha ... bon ben dans ca cas la, a part ma solution bidouille, j'ai rien à proposer ...

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
benou ha ... bon ben dans ca cas la, a part ma solution bidouille, j'ai rien à proposer ...
darklord22 Si tu déclares un entité exterene (ici le DTD), cela n'a aucune importance que le parser valide ou pas. Le parser n'est pas censé savoir qu'il ne s'agit que du DTD. Tu pourrais très bien déclaré des choses qui sont obligatoires pour parser le doc correctement ...
 
-> Si c'est déclaré, ca doit etre trouvé sinon warning puis erreur.
 
Malheureusement .... :(
benou et puis sur le site c'est pas ca qu'ils disent (que je comprend en tout cas). ils disent que si tu forces la validation (factory.setValidating(true)), et que le document ne référence pas une DTD, la ca fait un warning puis une erreur.
 
toi c'est plutot l'inverse : tu utilises une parser non validant et ca va quand même chercher la dtd si y a un doctype.
benou ca me parrait bizarre ton histoire...
y a forcément moyen de le désactiver !
désolé, j'ai pas beaucoup d'expérience dans le parsing XML en java ...
 
sinon j'ai bien une solution à la con... mais bon c'est de la bidouille :
tu déclares un proxy http dans ton appli java (System.setProperty()) vers un proxy que tu codes toi même.
 
Pour le proxy tu fais ouvre une socket qui à chaque message entrant renvoie une DTD qui valide ton document quelque soit sa forme.
 
comme ca, quand ton parser voudra aller consulter la dtd distante, il passera par ton proxy qui lui renverra une dTD validante. et le tour est joué.
 
bon, je l'avais dit que c'était de la bidouille :)
darklord22

benou a écrit a écrit :

pourquoi tu relances pas simplement le parsing en désactivant la validation ?
 
SAXParserFactory factory = SAXParserFactory.newInstance();
factoryWithValidation.setValidating(true);
 
SAXParser saxParserWithValidation = factory.newSAXParser();
factoryWithValidation.setValidating(false);
SAXParser saxParserWithoutValidation = factory.newSAXParser();
 
...
try {
   saxParserWithValidation.parse(ton fichier);
} catch (TonException e) {
   saxParserWithoutValidation.parse(ton fichier);
}
...  




 
Bin tu as lu la citation de chez SUN ?
 

SUN a écrit :

 
So now you know that a DTD is a requirement for a valid document. That makes sense. (Note, though, that the lack of a type declaration only generates a warning, as specified in the standard. On the other hand, any attempt to actually parse the document is immediately greeted with an error! Oh well...)  




 
Cela veut dire que si tu déclares un DTD dans ton fichier XML et qu'il ne peut etre trouvé, l'appli génère un warning mais si tu essaies de le parser tu obtiens une erreur et bye. Mais tu vois, meme si tu désactives la validation, c'est ca qui est dingue !
 
j'ai fait setvalidating(false);
rien à faire, le simple fait d'avoir un external type definition dans mon doc xml m'oblige à avoir la ressource ready. Ce qui est logique, il me semble mais bon de là à refuser un parsing sans validation (il faut pas oublier que tu peux déclarer certaines choses dans le DTD vitale pour le parsing du document).
 
Bref je suis bloqué mais bon tant pis!

benou pourquoi tu relances pas simplement le parsing en désactivant la validation ?
 
SAXParserFactory factory = SAXParserFactory.newInstance();
factoryWithValidation.setValidating(true);
 
SAXParser saxParserWithValidation = factory.newSAXParser();
factoryWithValidation.setValidating(false);
SAXParser saxParserWithoutValidation = factory.newSAXParser();
 
...
try {
   saxParserWithValidation.parse(ton fichier);
} catch (TonException e) {
   saxParserWithoutValidation.parse(ton fichier);
}
...
darklord22 Salut,
 
Mon problème est assez simple. J'ai un document XML que je dois valider  
 

Code :
  1. <?xml version="1.0" ?>
  2. <!DOCTYPE webconf-config PUBLIC
  3. "-//Infonet group - FUDNDP//DTD Webconf 2.5.X Configuration file//EN"
  4. "http://www.infonet.fundp.ac.be/soft/webconf/webconf-config-2.5.X.dtd">
  5. <webconf-config>


 
Bon supposons que notre site est down (ca peut arriver). Il se passe alors que j'ai une jolie exception que je peux catcher mais impossible de parser ...
 

SUN a écrit :

 
So now you know that a DTD is a requirement for a valid document. That makes sense. (Note, though, that the lack of a type declaration only generates a warning, as specified in the standard. On the other hand, any attempt to actually parse the document is immediately greeted with an error! Oh well...)




 
http://java.sun.com/xml/jaxp/dist/ [...] 6_val.html
 
Ma question : que faire si le DTD est introuvable? Il doit bien avoir moyen de lancer l'appli non? Au pire on le parse sans le valider mais la déclaration du DTD au début du fichier XML l'empêche ...  :gun:


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)