Utilización de un solucionador de texto sin analizar
La interfaz XUnparsedTextResolver se puede implementar y la implementación se puede registrar con XDynamicContext para sustituir el comportamiento de resolución predeterminado para los recursos cargados a través de la función de texto XSLT sin analizar.
Acerca de esta tarea
El comportamiento de resolución predeterminado para los recursos cargados a través de la función de texto XSLT sin analizar es resolver los URI relativos que se basan en el URI base del contexto estático. Si el URI base no está disponible, se utilizará el directorio de trabajo actual. Los URI absolutos se utilizan sin modificar.
Procedimiento
Utilice el método setUnparsedTextResolver en la interfaz XDynamicContext para registrar un solucionador de texto sin analizar.
Ejemplo
A continuación encontrará un ejemplo básico de la utilización de un solucionados de texto sin analizar.
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);
A continuación encontrará un ejemplo básico de una implementación del solucionados de texto sin analizar.
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);
}
}
}