解析対象外テキスト・リゾルバーの使用

XUnparsedTextResolver インターフェースは実装できます。 また、このインターフェースを XDynamicContext に登録された実装として指定することで、XSLT unparsed-text 関数を通じて ロードされたリソースのデフォルトの解決動作をオーバーライドすることができます。

このタスクについて

XSLT unparsed-text 関数を通じてロードされたリソースに対する デフォルトの解決動作としては、静的コンテキストからの基本 URI を基に 相対 URI を解決します。基本 URI が使用可能でない場合は、 現行作業ディレクトリーが使用されます。絶対 URI はそのまま使用されます。

手順

XDynamicContext インターフェースで setUnparsedTextResolver メソッドを 使用して、解析対象外テキスト・リゾルバーを登録します。

以下に、解析対象外テキスト・リゾルバーを使用する基本的な例を示します。
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);
以下に、解析対象外テキスト・リゾルバー実装の 基本的な例を示します。
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);
        }
    }
}

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=txml_resolvers_text
ファイル名:txml_resolvers_text.html