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

Répondre à