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());