구문 분석되지 않은 텍스트 분석기 사용
XUnparsedTextResolver 인터페이스가 구현 가능하며, 구현은 XSLT 구문 분석되지 않은 텍스트 함수를 통해 로드된 자원의 기본 분석 동작을 대체하도록 XDynamicContext에 등록됩니다.
이 태스크 정보
XSLT 구문 분석되지 않은 텍스트 함수를 통해 로드된 자원의 기본 분석 동작은 정적 컨텍스트에서 기본 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);
}
}
}