如何在XSLT中为unparsed-text函数传递动态文件名?
解决XSLT中unparsed-text使用动态文件名的问题
你当前的写法错误在于,XSLT函数的参数里不能直接用{$变量名}这种属性值模板语法——属性值模板仅在XML属性中生效,而函数参数需要合法的XPath表达式,必须用concat()函数来拼接动态路径。
修正后的核心代码
把原来的vText变量定义替换成以下写法:
<xsl:variable name="vText" select="tokenize(unparsed-text(concat('../data/ebpp/fopinvoices/arn/emfe_afp/', $FileName, '.txt')), '
')"/>
可选优化建议
为避免因文件不存在导致运行异常,可以先通过unparsed-text-available()检查文件可用性,再执行读取操作:
<xsl:variable name="filePath" select="concat('../data/ebpp/fopinvoices/arn/emfe_afp/', $FileName, '.txt')"/> <xsl:variable name="vText"> <xsl:if test="unparsed-text-available($filePath)"> <xsl:sequence select="tokenize(unparsed-text($filePath), '
')"/> </xsl:if> </xsl:variable>
如果指定文件不存在,vText会返回空值,不会直接抛出错误。
另外,若使用XSLT 2.0及以上版本,换行符可以用正则表达式'\r?\n'匹配,兼容性更强:
tokenize(unparsed-text($filePath), '\r?\n')
内容的提问来源于stack exchange,提问作者Pooja
相关产品推荐
相关产品推荐

