从前一天开始,使用 Saxon HE 9.4.0.7 我成功地使用了“XsltExecutable”类的方法“getGlobalParameters”。任务是获取 XSLT 文件的参数。
当转向 Saxon HE 9.5.0.2 时,此方法引发 NullPointerException。下面是一个示例,在9.4.0.7 版本中完美运行,但在 9.5.0.2 版本中没有(引发 NullPointerException)。有人可以帮我找到并解决这个问题吗?提前致谢。
import java.io.*;
import java.util.*;
import javax.xml.transform.stream.*;
import net.sf.saxon.*;
import net.sf.saxon.s9api.*;
import org.junit.*;
public class GlobalParametersTest {
@Test
public void globalParametersTest() throws UnsupportedEncodingException, SaxonApiException {
Configuration configuration = Configuration.newConfiguration();
Processor processor = new Processor(configuration);
XsltCompiler xsltCompiler = processor.newXsltCompiler();
String source="<?xml version='1.0'?>" +
" <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'" +
" xmlns:xs='http://www.w3.org/2001/XMLSchema'" +
" version='2.0'>" +
" <xsl:param name='surname' as='xs:string' />" +
" <xsl:param name='age' as='xs:integer' />" +
" <xsl:template match='/'><xsl:element name='root' /></xsl:template>" +
" </xsl:stylesheet>";
XsltExecutable xsltExecutable = xsltCompiler.compile(new StreamSource(new ByteArrayInputStream(source.getBytes("UTF-8"))));
Map<QName, XsltExecutable.ParameterDetails> params = xsltExecutable.getGlobalParameters();
System.out.println();
int i=0;
for (QName key: params.keySet()) {
System.out.println("Parameter n."+(++i)+": "+key);
}
System.out.println();
}
}
以下分别是 pom.xml 的片段,以及 Saxon-HE 的工作和非工作版本:
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
<version>9.4.0.7</version>
</dependency>
或者
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
<version>9.5.0.2</version>
</dependency>