此解决方案仅与 Windows 7 上控制台应用程序表单中的 Saxon-HE 9.4.0.3N XSLT 处理器有关。
在我的实验中,我发现 document() 函数将接受文件名或 URI。但是我会避免使用文件名,因为它们需要是短格式的。如果您使用长格式,文件名将被拒绝。
假设您的文档是...
c:\path\to\document.xml
在映射到驱动器“j”的服务器“servername”上。
要从此使用作为 document() 参数值形成 URI...
file:///j:/path/to/document.xml
关于 URI,我误认为撒克逊人不接受长格式。这仅适用于文件名。然而,有一些陷阱......
- 注意正斜杠。反斜杠将不起作用。
- 我还没有找到一种方法来构建一个可行的文件:只有 UNC 名称的 URI。您需要将驱动器映射到一个字母。
- 任何因任何原因无法打开文档都将被报告为相同的错误。对于文件系统,有很多事情可能出错,如果您无法打开文件,则认为 URI 错误是不安全的。无法在特定时间打开文件的原因可能有很多。
- 谨防防火墙问题。这些发挥作用。
- 许多文本编辑器(例如 NotePad++)假定在没有 BOM 且未以两种 UTF-16 编码之一编码的情况下,文本文件在系统代码页中编码。Saxon 将默认假设该文件以 UTF-8 编码,因此如果您在 NotePad++ (ä) 中使用我的代码页有一个看起来像这样的字符,Saxon 将吐出假人,并报告它无法打开文件。(旁白:我不确定我的代码页是什么。我的操作系统是 Win7,当前系统区域设置是英语(澳大利亚)。它是系统本地决定系统代码页)。Saxon 不会打开文档的原因是某些代码页中编码的 (ä) 会导致字节序列不是有效的 UTF-8 序列。
- 底层操作系统不支持不是 URL 路径的 URI 路径。Saxon 很可能会如实说它支持与 document() 函数相关的 URI,但这不会煮任何卷心菜,因为在实践中,您不能使用它们。- 至少不在 o/s 的 windows 系列上。
- 请忽略文件协议上的MSDN 页面。Saxon document() 函数不接受该页面上建议的 URL 形式(带有 | 字符等)。使用我上面建议的表格。我已经对其进行了测试,并且可以正常工作。