使用Saxon 9通过XSLT读取CSV文件失败求助
解决Saxon 9中unparsed-text-available()返回false的问题
1. 确认完整文件路径
你只提及CSV位于C:/Dev/,但$pathToCSV变量必须指向具体文件名,而非仅目录。比如正确路径应为C:/Dev/data.csv,而非C:/Dev/。
检查变量定义是否正确,示例:
<xsl:param name="pathToCSV" select="'C:/Dev/your-target.csv'"/>
路径可使用/或转义后的\\,保持格式统一即可。
2. 检查文件权限与状态
确保运行Saxon的进程拥有目标CSV文件的读取权限,同时确认文件未被其他程序锁定(比如正在用Excel打开)。Windows系统下可右键文件验证“属性-安全”权限设置。
3. 指定文件编码
unparsed-text()默认采用系统编码,若CSV使用特殊编码(如UTF-8带BOM、GBK),可能导致函数识别失败。可显式指定编码参数:
<xsl:when test="unparsed-text-available($pathToCSV, 'UTF-8')"> <xsl:variable name="csv" select="unparsed-text($pathToCSV, 'UTF-8')"/> <!-- 后续解析逻辑 --> </xsl:when>
常见可选编码:GB2312、ISO-8859-1,需匹配CSV实际编码。
4. 解除Saxon安全限制
若使用Saxon PE/EE版本,默认可能限制本地文件访问。命令行运行时可添加参数放宽限制:
java -jar saxon9pe.jar -s:input.xml -xsl:your-transform.xsl -o:output.xml pathToCSV="C:/Dev/your-target.csv" -allow:all
Saxon HE版本无此限制,可跳过此步骤。
5. 排除变量传递问题
暂时将路径硬编码到函数中,测试是否能正常读取:
<xsl:when test="unparsed-text-available('C:/Dev/your-target.csv')"> <!-- 测试逻辑 --> </xsl:when>
若此方式成功,说明$pathToCSV变量的定义或参数传递存在问题,需检查变量是否正确传入。
6. 验证文件存在性
手动确认C:/Dev/下的CSV文件名拼写正确,注意大小写(部分环境下Saxon对文件名大小写敏感),避免出现.txt误写为.csv这类低级错误。
内容的提问来源于stack exchange,提问作者DevPH
相关产品推荐
相关产品推荐

