【发布时间】:2020-07-09 08:02:55
【问题描述】:
我正在尝试使用 collection 函数列出具有 xsl 的目录文件。它似乎适用于正常用例(在本地目录中搜索),但在网络上搜索路径时失败:例如。 \\name_of_machine\the\path\to\folder
日志错误是:
FODC0002: The file or directory
file:/D:/the/current/location/of/the/executing/xsl/%5C%5Cname_of_machine2%5Cthe%5Cpath%5Cto%5Cfolder does not exist
还有我的代码中的一个 sn-p:
<xsl:variable name="docList" select="for $f in collection($dir) return lower-case($f)"/>
因此,基本上,collection 函数将执行代码的 XSL 文件的当前位置添加到前面,然后转义所有 \(反斜杠)字符。
如何使用收集功能通过网络检索文件?
编辑: 我正在使用 Saxon-HE 9.8.0-15
【问题讨论】:
-
我认为,在 Windows 上代表 Java 的 UNC 路径的文件 URI 将是
file:////name_of_machine/the/path/to/folder但我不知道它是否适用于 Saxon 9 的collection目录搜索“魔法” . -
我担心将 UNC 文件名表示为 URI 的问题由来已久。首先,缺乏标准:直到最近,文件:URI 方案的 RFC 都非常模糊。与此相关,在不同的产品中有不同的实现方式:Java 和 .NET 的方式不同。但无论您做什么,collection() 函数都需要一个 URI,而不是文件名,并且 URI 不包含反斜杠。
-
@MichaelKay 感谢您的信息!如果不允许使用反斜杠,在使用 Saxon 访问网络上的文件时,哪种方法最好?
-
最后,我使用了@MartinHonnen 建议的解决方案