gpt4 book ai didi

xslt - XSL模板的Grails引用和转换

转载 作者:行者123 更新时间:2023-12-02 15:32:10 26 4
gpt4 key购买 nike

尝试使用Grails进行一些转换,并想知道引用问题。
我已经将模板托管在“/WEB-INF/xslt/{file}.xsl”下,并且我注意到这些文件具有对其他文件的导入引用
就像是:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:i18n="http://apache.org/cocoon/i18n/2.1">
<xsl:import href="file2.xsl"/>
<xsl:import href="../xslt/file2.xsl"/>

我知道这样的引用不是正确的事实,并且我想知道当需要转换时我应该如何从要导入的主xsl文件中引用xsl资源。

我正在通过以下代码处理它们:
def String resources = grailsApplication.mainContext.getResource('/WEB-INF/xslt/'+xslTemplateName).file    
def String xslt = new File(resources).text
def factory = TransformerFactory.newInstance()
def transformer = factory.newTransformer(new StreamSource(new StringReader(xslt)))

最佳答案

在导入中使用相对URI没什么问题,问题在于,您自己加载XSLT文件的内容,然后从Transformer创建new StreamSource(Reader)Transformer不知道从其加载的URL,因此无法正确解析相对URI。相反,您应该使用采用StreamSourcesystemId构造函数之一,例如

def xslResource = grailsApplication.mainContext.getResource(
'/WEB-INF/xslt/'+xslTemplateName)

StreamSource xslSource = new StreamSource(xslResource.getInputStream(),
xslResource.getURL().toString())
Transformer transformer = factory.newTransformer(xslSource)

还要注意,您应该让 TransformerFactory直接读取资源的 InputStream,以便XML解析器可以检测并使用正确的字符编码来加载文件。进行 File.text时,它始终使用当前平台的默认编码,该默认编码可能与 <?xml?>声明给出的文件编码不同。

关于xslt - XSL模板的Grails引用和转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17925450/

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