You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含空格路径下Java+Saxon执行XSLT转换CSV到XML的问题

解决Saxon XSLT转换中含空格路径的问题

遇到带空格的路径就失效?这大概率是命令行参数传递时的空格拆分问题,再加上XSLT代码里一个容易忽略的小错误,我帮你一步步解决:

1. 修正命令行参数的空格传递

在Windows CMD中,带空格的路径需要特殊处理才能完整传递给Saxon。你需要给pathToCSV的参数值套上嵌套双引号,让命令行把整个路径当作一个完整参数:

C:\Program Files (x86)\Java\jdk1.8.0_191\bin>java.exe -jar c:\saxon\saxon9he.jar -o:"E:\Temp\Folder Has Spaces\test.xml" -it:main -xsl:E:\Temp\csvxml_TEST.xsl pathToCSV='"E:\Temp\Folder Has Spaces\test.csv"'

这里的'"..."'写法是告诉CMD,把内部的双引号一起传递给Saxon,避免空格把路径拆成多个参数。

如果你用PowerShell的话,语法更友好,直接用普通双引号包裹参数值就行:

& "C:\Program Files (x86)\Java\jdk1.8.0_191\bin\java.exe" -jar c:\saxon\saxon9he.jar -o:"E:\Temp\Folder Has Spaces\test.xml" -it:main -xsl:E:\Temp\csvxml_TEST.xsl pathToCSV="E:\Temp\Folder Has Spaces\test.csv"

2. 修复XSLT代码的参数引用错误

我注意到你的XSLT代码里有个语法错误:

<xsl:variable name="csv" select="unparsed-text(pathToCSV)"/>

这里调用unparsed-text时,参数名前面少了$符号!正确的写法应该是:

<xsl:variable name="csv" select="unparsed-text($pathToCSV)"/>

没有$的话,XSLT会把pathToCSV当作XML节点名去查找,而不是使用你传递的命令行参数值——这可能是你测试无空格路径时看似正常的巧合,但必须修正才能保证参数正确传递。

验证方法

按上面两步修改后,重新运行命令:

  • unparsed-text-available($pathToCSV)会正确识别带空格的路径
  • 转换后的XML会正常生成到指定的带空格输出路径里

内容的提问来源于stack exchange,提问作者user12710757

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 09:47:51