XSLT - 使用xsl从位于同一jar文件中的文本文件中提取数据

时间:2016-10-13 19:12:17

标签: xml xslt jar

为了避免在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

0 个答案:

没有答案