为了避免在XSLT转换文件中对某些字符串进行硬编码,我创建了一个getString模板,允许我使用特定键从文件中获取字符串。文件的路径根据要转换的XML的语言(英语或法语)以及作为参数传递的$ form变量而变化。
该方法经过测试,在正常项目中运行良好,但只要项目在jar文件中编译并上传到linux服务器上,getString就会停止正常工作。
查看错误日志后,似乎路径getString在jar文件中尝试到达时无效。我尝试使用函数resolve-uri来返回正确的绝对路径,但是在jar文件中尝试时我得到了同样的错误。任何人都可以帮助我吗?
这是XSLT模板。用于解析外部文件的函数是: 未解析的文本($路径)
<xsl:template name="getString">
<xsl:param name="key" />
<xsl:param name="form" />
<xsl:variable name="path">
<xsl:variable name="basePath"
select="concat('../../../reports/Resources/',$form)" />
<xsl:choose>
<xsl:when test="caseXmlData/header/language = 'fr_CA'">
<xsl:value-of select="concat($basePath, '/', $form, '_string_fr_CA.txt')" />
</xsl:when>
<xsl:when test="caseXmlData/header/language = 'en_CA'">
<xsl:value-of select="concat($basePath, '/', $form, '_string_en_CA.txt')" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat($basePath, '/', $form, '_string_default.txt')" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="properties" select="unparsed-text($path)" />
<xsl:variable name="lines" select="
for $x in
for $i in tokenize($properties, '\n')[matches(., '^[^!#]')]
return tokenize($i, '=')[2]
return translate(translate(normalize-space($x), '\', ''), '|', '')" />
<xsl:variable name="keys" select="
for $x in
for $i in tokenize($properties, '\n')[matches(., '^[^!#]')]
return tokenize($i, '=')[1]
return normalize-space($x)" />
<xsl:sequence select="$lines[index-of($keys, $key)]" />
</xsl:template>
编辑:处理器是Saxon HE