使用Websphere中的相对路径从XSL读取XML文件

时间:2013-04-26 06:10:51

标签: xslt path websphere xslt-2.0

我正在使用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文件对预编译文件可见的线索,那将是一个很好的帮助。

0 个答案:

没有答案