On Wednesday 13 August 2003 09:12, Sylvain RICHET wrote:
> Bonjour � Tous,
>
> Voici mon probleme : une webapp (d�ploy�e dans un un.war, sous WEBLOGIC
> 6.1) contient un fichier XML r�f�ren�ant une DTD. Je ne sais pas
> exactement:
> 1) ou placer, dans l'arborescence J2EE standard (webapp/WEB-INF...), les
> fichiers .xml et .dtd. 2) comment r�f�rencer ma DTD dans le fichier XML
>
> ## Quelques precisions :
>
> 1) j'ai plac� le fichier XML dans :
> [webapp]/WEB-INF/classes/xml/gadgets.xml
>
> 2) j'ai plac� le fichier DTD dans : [webapp]/dtd/gadgets.dtd
>
> 3) La DTD est r�f�renc�e de la mani�re suivant dans le fichier XML :
> <!DOCTYPE gadgets SYSTEM "dtd/gadgets.dtd">
>
> 4) ma servlet acc�de au fichier XML par un :
> InputStream xmlfile =
> this.getClass().getClassLoader().getResourceAsStream("xml/gadgets.xml");
>
En fait, tu peux garder tes hypotheses pr�c�dentes.
En passant ce stream au DocumentBuilder du jdk 1.4,
il faut juste identiquer au DocumentBuilder comment r�soudre cette
r�f�rence � la DTD.
Cela se fait par :
docBuilder.setEntityResolver(myResolver); // cf [1]
L'objet pass� en param�tre (un EntityResolver cf [2]) doit impl�menter la m�thode
resolveEntity qui permettra de trouver la bonne DTD
En r�sum�, il est de la responsabilit� du d�veloppeur de fournir
1 objet au DocumentBuilder pour lui indiquer ou trouver le flux dont
il a besoin : la DTD
Il faut proc�der sensiblement de la m�me fa�on pour les transformations
XSLT, pour que le processeur trouve les ressources qui doivent �tre lues
par un appel a document() ou � import ou � include...
[1] setEntityResolver :
http://java.sun.com/j2se/1.4.1/docs/api/javax/xml/parsers/DocumentBuilder.html#setEntityResolver(org.xml.sax.EntityResolver)
[2] EntityResolver :
http://java.sun.com/j2se/1.4.1/docs/api/javax/xml/parsers/DocumentBuilder.html#setEntityResolver(org.xml.sax.EntityResolver)
En utilisant JDom, c'est la m�me chose, mais les objets sont diff�rents
l'EntityResolver [3] est pass� au SAXBuilder [4]
[3] EntityResolver SAX
:http://www.saxproject.org/apidoc/org/xml/sax/EntityResolver.html
[4] setEntityResolver SAX :
http://jdom.org/docs/apidocs/org/jdom/input/SAXBuilder.html#setEntityResolver(org.xml.sax.EntityResolver)
cordialement
--
Fr�d�ric Laurent
http://www.opikanoba.org