含空格路径下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
相关产品推荐
相关产品推荐

