我按照 本指南 在 Windows 上使用 xsltproc
当我使用相对路径运行
xsltproc
时,即:
xsltproc -o "..\output.html" "c:\templates\out.xsl" "c:\data\input.xml"
一切都好。 但是当我使用绝对路径运行它时,它失败了,例如:
xsltproc -o "c:\output.html" "c:\templates\out.xsl" "c:\data\input.xml"
I/O error : Invalid argument
I/O error : Invalid argument
尝试使用正斜杠和反斜杠作为路径分隔符,结果相同(问题仅针对
-o
参数)
xsltproc
期望如何编码 Windows 绝对路径?
对我来说,这是输出文件路径的问题;即使它被双引号它仍然给出了错误。一旦我删除了包含空格的文件夹,它就起作用了。奇怪的是,输入的
%I
文件位于同一个包含空间的文件夹中,我不需要修改该文件夹。
xsltproc 似乎不知道驱动器号(“
C:\path\to\output\output.html
”)。空格和反斜杠没有问题。如果我从“输出”(“\path\to\output\output.html
”)中删除驱动器号,一切正常。
这个“解决方案”的问题是输入和输出必须共享驱动器号。
延斯
在 Windows 和 Linux 环境中都使用过 xsltproc。 Windows xsltproc 进程将某些路径视为统一资源标识符 (URI) 类型。在命令行上处理直接 xsl 和 xml 输入文件的路径是 Windows 标准,但输出和内部路径必须采用 URI 格式。不知道为什么 Windows 版本需要这个而 Linux 版本不需要,可能是编译时的问题。例如: Linux: 命令行 XSL 文件路径:“/library/parser.xsl 的路径” 命令行 XML 文件路径:“/path to input/input.xml” 命令行--输出文件路径:“/输出路径/output.html” 内部“document()”文件路径:“/path to input/input2.xml” 视窗: 命令行 XSL 文件路径:“C:\库路径\parser.xsl” 命令行 XML 文件路径:“C:\path to input\input.xml” 命令行--输出文件路径:“C:/path%20to%20output/output.html” 内部“document()”文件路径:“C:/path%20to%20input/input2.xml”