Resolver für nicht analysierten Text verwenden

Das Interface XUnparsedTextResolver kann implementiert und die Implementierung dann im XDynamicContext registriert werden, um das Standardauflösungsverhalten für Ressourcen außer Kraft zu setzen, die mit der XSLT-Funktion unparsed-text geladen werden.

Informationen zu diesem Vorgang

Für Ressourcen, die mit der XSLT-Funktion unparsed-text geladen werden, werden standardmäßig relative URIs ausgehend vom Basis-URI aus dem statischen Kontext aufgelöst. Wenn der Basis-URI nicht verfügbar ist, wird das aktuelle Arbeitsverzeichnis verwendet. Absolute URIs werden unverändert verwendet.

Vorgehensweise

Verwenden Sie zum Registrieren eines Resolvers für nicht analysierten Text die Methode setUnparsedTextResolver des Interface XDynamicContext.

Beispiel

Das folgende Basisbeispiel zeigt die Verwendung eines Resolvers für nicht analysierten Text.
XFactory factory = XFactory.newInstance();

// Style-Sheet vorbereiten
XSLTExecutable executable = factory.prepareXSLT(new StreamSource(stylesheetFile));
           
// Dynamischen Kontext erstellen und Resolver für nicht analysierten Text definieren
XDynamicContext dynamicContext = factory.newDynamicContext();
AnUnparsedTextResolver resolver = new AnUnparsedTextResolver(replacementBase);
dynamicContext.setUnparsedTextResolver(resolver);
           
// Transformation ausführen
Source source = new StreamSource(inputFile);
Result result = new StreamResult(System.out);
executable.execute(source, dynamicContext, result);
Das folgende Basisbeispiel zeigt die Implementierung eines Resolvers für nicht analysierten Text.
class AnUnparsedTextResolver implements XUnparsedTextResolver
{
    String _replacementBase;
       
    public AnUnparsedTextResolver(String replacementBase)
    {
        _replacementBase=replacementBase;
    }
       
    // URI auflösen und vom URI repräsentierte Ressource zurückgeben
    // Pseudoschema "rebase:" wird implementiert
    public String getResource(String href, String encoding, String base) {
        String rebasePrefix="rebase:";

        if (href.startsWith(rebasePrefix)) {
            href = href.substring(rebasePrefix.length());
            base = _replacementBase;
        }
           
        try  { 
            // Basis-URI-Objekt abrufen
            URI uri = new java.net.URI(base);
            // Relativer Bezug zum Basis-URI aufgelöst
            URI resolvedURI = uri.resolve(href);
            // Leseversuch...
            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) {
                // Hier beliebige Zeichenbearbeitung vornehmen
                buffer.append((char)s);
            }
            return buffer.toString();
        } catch (Exception e)  {
            throw new RuntimeException(e);
        }
    }
}

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=txml_resolvers_text
Dateiname:txml_resolvers_text.html