Utilisation d'un programme de résolution de texte non analysé
Vous pouvez implémenter l'interface XUnparsedTextResolver et enregistrer cette implémentation dans le contexte dynamique pour remplacer le comportement par défaut applicable à la résolution des ressource chargées via la fonction XSLT unparsed-text.
Pourquoi et quand exécuter cette tâche
Le mode de résolution par défaut pour les ressources chargées avec la fonction XSLT unparsed-text consiste à convertir les URI relatifs en fonction de l'URI de base issu du contexte statique. Si cet URI de base est indisponible, le répertoire de travail en cours est utilisé. Les URI absolus sont utilisés tels quels.
Procédure
Utiliser la méthode setUnparsedTextResolver dans l'interface XDynamicContext
pour enregistrer un programme de résolution de texte non analysé.
Exemple
L'exemple suivant illustre comment utiliser un programme de résolution de texte non analysé.
XFactory factory = XFactory.newInstance();
// Prepare the stylesheet.
XSLTExecutable executable = factory.prepareXSLT(new StreamSource(stylesheetFile));
// Create the dynamic context and set the unparsed text resolver.
XDynamicContext dynamicContext = factory.newDynamicContext();
AnUnparsedTextResolver resolver = new AnUnparsedTextResolver(replacementBase);
dynamicContext.setUnparsedTextResolver(resolver);
// Execute the transformation.
Source source = new StreamSource(inputFile);
Result result = new StreamResult(System.out);
executable.execute(source, dynamicContext, result);
L'exemple suivant illustre comment implémenter un programme de résolution de texte non analysé.
class AnUnparsedTextResolver implements XUnparsedTextResolver
{
String _replacementBase;
public AnUnparsedTextResolver(String replacementBase)
{
_replacementBase=replacementBase;
}
// Resolve URI, returning the resource that URI represents.
// Implements the "rebase:" pseudo-scheme.
public String getResource(String href, String encoding, String base) {
String rebasePrefix="rebase:";
if (href.startsWith(rebasePrefix)) {
href = href.substring(rebasePrefix.length());
base = _replacementBase;
}
try {
// Get base URI object
URI uri = new java.net.URI(base);
// Resolved relative reference against base URI
URI resolvedURI = uri.resolve(href);
// Try to read...
URL url = resolvedURI.toURL();
URLConnection urlCon = url.openConnection();
BufferedInputStream stream = new BufferedInputStream(urlCon.getInputStream());
StringBuffer buffer = new StringBuffer();
int s;
while ((s = stream.read())!= -1) {
// Do any character manipulation here.
buffer.append((char)s);
}
return buffer.toString();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}