Un document XML étant susceptible de contenir des ressources externes pointées par des adresses URI, un objet URIResolver peut permettre de résoudre de telles adresses URI, c'est-à-dire, de retourner à l'application l'objet Source pointée par l'adresse URI présente dans les instructions XSLT document(), xsl:import et xsl:include.
import java.net.MalformedURLException; import java.net.URL; import javax.xml.transform.Source; import javax.xml.transform.TransformerException; import javax.xml.transform.URIResolver; import javax.xml.transform.stream.StreamSource; public class GestionnaireURI implements URIResolver { private URL baseDefaut; public GestionnaireURI() { this("http://www.laltruiste.com/"); } public GestionnaireURI(String URIBase) { try { this.baseDefaut = new URL(URIBase); } catch (MalformedURLException e) { System.out.println("L'adresse URL (" + URIBase + ") soumise n'est pas correcte !"); } } public Source resolve(String href, String base) throws TransformerException { try { URL adresseURL = null; if (!href.matches("^[a-z]+://.+$")) { if (base == null || base.matches("^[\\s]*$")) { adresseURL = new URL(this.baseDefaut, href); } else { URL baseURL = new URL(base); adresseURL = new URL(baseURL, href); } } else { adresseURL = new URL(href); } return new StreamSource(adresseURL.openStream()); } catch (Exception e) { return null; } } } transformeur.setURIResolver(new GestionnaireURI()); <!-- Feuille de style --> <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/xhtml1/strict"> <xsl:template match="/"> <html> <xsl:include href="meta_description.inc"/> <xsl:apply-templates/> </html> </xsl:template> <!-- ... --> </xsl:stylesheet>
L'objet URIResolver peut être obtenu par une invocation de la méthode getURIResolver().
URIResolver gestURI = transformeur.getURIResolver();
Les objets TransformerFactory peuvent aussi définir un gestionnaire d'URI URIResolver qui servira pour résoudre les adresses URI spécifiées dans les instructions de transformation.
transformeur.setURIResolver(new GestionnaireURI());