gpt4 book ai didi

java - 加载 XSLT 文件时解析相对路径

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:25 25 4
gpt4 key购买 nike

我需要使用 Apache FOP 进行 XSL 转换,我有这样的代码:

//Setup FOP
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
//Setup Transformer
Source xsltSrc = new StreamSource(new File(xslPath));
Transformer transformer = tFactory.newTransformer(xsltSrc);

//Make sure the XSL transformation's result is piped through to FOP
Result res = new SAXResult(fop.getDefaultHandler());
//Setup input
Source src = new StreamSource(new File(xmlPath));
//Start the transformation and rendering process
transformer.transform(src, res);

哪里xslPath是我的 XSLT 文件的存储路径。

我已经确认当我只有一个 XSLT 文件时它可以工作,但在我的项目中我将东西分成几个 XSLT 文件并用 <xsl:import /> 加入它们。标签。使用此配置,我得到一个 NullPointerException,因为它不理解存储在 XSLT 中的所有信息,因为它分布在不同的文件中。

我想知道是否有任何方法可以将所有这些文件加载​​到 Source xsltSrc 中变量,以便所有 XSL 信息可用。

更新

我根据Mads Hansen给出的答案改了代码,还是不行。我必须在类路径中包含 XSLT slt 文件,因此我使用 ClassLoader 加载 XSLT 文件。我在执行 url.toExternalForm() 时检查了 URL 的路径是否正确.这是我的新代码:

ClassLoader cl = this.getClass().getClassLoader();
String systemID = "resources/xslt/myfile.xslt";
InputStream in = cl.getResourceAsStream(systemID);
URL url = cl.getResource(systemID);
Source source = new StreamSource(in);
source.setSystemId(url.toExternalForm());
transformer = tFactory.newTransformer(source);

它找到并加载 myfile.xslt但它仍然没有解析到其他 XSLT 文件的相对路径。

我做错了什么?

最佳答案

我刚知道,一个迟到的答案(在 FOP 1.0 上测试)------

您只需为您的工厂设置一个 uri 解析器,如下所示:

TransformerFactory transFact = TransformerFactory.newInstance();
StreamSource xsltSource = new StreamSource(xsl);

// XXX for 'xsl:import' to load other xsls from class path
transFact.setURIResolver(new ClasspathResourceURIResolver());
Templates cachedXSLT = transFact.newTemplates(xsltSource);
Transformer transformer = cachedXSLT.newTransformer();


class ClasspathResourceURIResolver implements URIResolver {
@Override
public Source resolve(String href, String base) throws TransformerException {
return new StreamSource(XXX.getClassLoader().getResourceAsStream(href));
}
}

和我导入的 xsl(所以 'imported.xsl' 应该在类路径中):

<xsl:import href="META-INF/companybusinesscredit/imported.xsl"/>

关于java - 加载 XSLT 文件时解析相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3699860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com