我正在使用XSL进行XML转换,我需要从Web服务项目中使用此转换。对于转换,我正在使用IBM XML的预编译工具。以下是锄头预编译完成。
XFactory factory = XFactory.newInstance();
// Get the compilation factory
// Factory for compiling expressions, queries and stylesheets into Java
// classes.
XCompilationFactory compileFactory = factory.getCompilationFactory();
// Create the compilation parameters
// Interface for compilation parameter settings
XCompilationParameters params = compileFactory.newCompilationParameters(xsltFileName);
params.setPackageName(packageName);
params.setDirectoryName("bin");
StreamSource source = new StreamSource(new File(filePath));
// Generate the compiled classes
boolean flag = compileFactory.compileXSLT(source, params);
上面的代码编译xslt文件并将它们放入bin
目录。 IBM XML转换从预编译创建的是一堆类文件。 Reason why I use bin here is it's in the classpath
。然后我可以在bin文件夹中使用预编译的xslt文件,并按如下方式有效地进行转换。
StreamResult output = null;
StreamSource transformedSource = null;
// Create the factory
XFactory factory = XFactory.newInstance();
// Get the compilation factory
XCompilationFactory compileFactory = factory.getCompilationFactory();
// Create the compilation parameters
XCompilationParameters params = compileFactory.newCompilationParameters(fileName);
params.setPackageName(packageName);
// Load the executable
XSLTExecutable executable = compileFactory.loadXSLT(params);
StringWriter strWriter = new StringWriter();
output = new StreamResult(strWriter);
executable.execute(source, output); // Execute the transformation. Check
// The output for result.
// Prepare a new Source to return
Reader reader = new StringReader(strWriter.getBuffer().toString());
transformedSource = new StreamSource(reader);
我需要提到的另一个问题是上面的转换我需要从XSL读取一些外部XML文件(作为查找)。我使用xsl Document
函数读取它们如下。
<xsl:variable name="booleanLookupDoc"
select="document('../Lookups/BooleanLookup.xml')" />
此处路径是相对于XSL文件给出的。虽然在预编译并将类文件放到bin目录之后,上面的路径是相对于XSL文件的,但是它可以找到并且它可以找到那些查找文件。
将此项目包含到Web服务项目时会出现问题。对于Web服务项目,我包括上面的转换项目。(使用eclipse我将整个转换项目添加到Web服务项目中。当我在一台计算机上预编译和运行Web服务时,这很好。但是当我创建EAR文件(WebSphear部署文件)时并在另一台机器上部署XSL产生一个错误,说它无法找到Lookup XML文件。通过逆向工程工具,我们了解到预先通过的类文件包含XML的路径为“Lookups / BooleanLookup.xml”。我们尝试将Lookup目录放在WEB-内部INF,WebContent文件夹,内部类文件夹等。没有任何效果。
如果有人能给我一些关于使这些XML文件对预编译文件可见的线索,那将是一个很好的帮助。