Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 用于另一台计算机/服务器上的文件的document()函数_Xslt_Xpath_Xslt 1.0 - Fatal编程技术网

Xslt 用于另一台计算机/服务器上的文件的document()函数

Xslt 用于另一台计算机/服务器上的文件的document()函数,xslt,xpath,xslt-1.0,Xslt,Xpath,Xslt 1.0,我理解document()的用法如下 <xsl:value-of select="document('path\to\docuemnt.xml')/RootElement/Element"/> 这当然不存在。您对document()的理解是错误的。它需要一个URI,而不是文件名。您对document()的理解不正确。它需要一个URI,而不是文件名。此解决方案仅与Windows 7上控制台应用程序窗体中的Saxon HE 9.4.0.3N XSLT处理器相关 在我的实验中,我发现do

我理解document()的用法如下

<xsl:value-of select="document('path\to\docuemnt.xml')/RootElement/Element"/>

这当然不存在。

您对document()的理解是错误的。它需要一个URI,而不是文件名。

您对document()的理解不正确。它需要一个URI,而不是文件名。

此解决方案仅与Windows 7上控制台应用程序窗体中的Saxon HE 9.4.0.3N XSLT处理器相关

在我的实验中,我发现document()函数将接受文件名或URI。但是,我会避免使用文件名,因为它们需要是简短的形式。如果使用长格式,文件名将被拒绝

假设您的文档是

c:\path\to\document.xml
在映射到驱动器“j”的服务器“servername”上

要从此文件中形成URI,请将其用作document()参数值

file:///j:/path/to/document.xml
关于URI,我错误地认为Saxon不接受长格式。这仅适用于文件名。然而,有一些陷阱

  • 请注意前斜杠。反斜杠不起作用
  • 我还没有找到一种方法来构建一个可行的文件:只使用UNC名称的URI。您需要将驱动器映射到字母
  • 任何因任何原因未能打开文档都将被报告为相同的错误。对于文件系统,可能会出现很多问题,如果无法打开文件,就不能安全地假定URI是错误的。无法在特定时间打开文件的原因可能有很多
  • 小心防火墙问题。这些都发挥了作用
  • 许多文本编辑器(如记事本+)假定,在没有BOM表且未在两种UTF-16编码之一中编码的情况下,文本文件在系统代码页中编码。Saxon将默认假定该文件是以UTF-8编码的,因此,如果您在记事本++(ä)中的代码页中有一个类似于此的字符,Saxon将吐出该虚拟文件,并报告它无法打开该文件。(旁白:我不确定我的代码页是什么。我的操作系统是Win7,当前系统语言环境是英语(澳大利亚)。系统代码页由系统本地决定)。Saxon不会打开文档的原因是,在某些代码页中编码的(ä)会导致一个字节序列,该序列不是有效的UTF-8序列
  • 基础操作系统不支持非URL路径的URI路径。Saxon可能会诚实地说,它支持与document()函数相关的URI,但这并不能煮熟任何卷心菜,因为在实践中,您不能使用它们。-至少在windows系列的o/s上不是这样
  • 请忽略文件协议上的。Saxon document()函数不接受该页面上建议的URL格式(带有|字符等)。使用我上面建议的形式。我已经测试过了,它是有效的

  • 此解决方案仅与Windows 7上控制台应用程序表单中的Saxon HE 9.4.0.3N XSLT处理器相关

    在我的实验中,我发现document()函数将接受文件名或URI。但是,我会避免使用文件名,因为它们需要是简短的形式。如果使用长格式,文件名将被拒绝

    假设您的文档是

    c:\path\to\document.xml
    
    在映射到驱动器“j”的服务器“servername”上

    要从此文件中形成URI,请将其用作document()参数值

    file:///j:/path/to/document.xml
    
    关于URI,我错误地认为Saxon不接受长格式。这仅适用于文件名。然而,有一些陷阱

  • 请注意前斜杠。反斜杠不起作用
  • 我还没有找到一种方法来构建一个可行的文件:只使用UNC名称的URI。您需要将驱动器映射到字母
  • 任何因任何原因未能打开文档都将被报告为相同的错误。对于文件系统,可能会出现很多问题,如果无法打开文件,就不能安全地假定URI是错误的。无法在特定时间打开文件的原因可能有很多
  • 小心防火墙问题。这些都发挥了作用
  • 许多文本编辑器(如记事本+)假定,在没有BOM表且未在两种UTF-16编码之一中编码的情况下,文本文件在系统代码页中编码。Saxon将默认假定该文件是以UTF-8编码的,因此,如果您在记事本++(ä)中的代码页中有一个类似于此的字符,Saxon将吐出该虚拟文件,并报告它无法打开该文件。(旁白:我不确定我的代码页是什么。我的操作系统是Win7,当前系统语言环境是英语(澳大利亚)。系统代码页由系统本地决定)。Saxon不会打开文档的原因是,在某些代码页中编码的(ä)会导致一个字节序列,该序列不是有效的UTF-8序列
  • 基础操作系统不支持非URL路径的URI路径。Saxon可能会诚实地说,它支持与document()函数相关的URI,但这并不能煮熟任何卷心菜,因为在实践中,您不能使用它们。-至少在windows系列的o/s上不是这样
  • 请忽略文件协议上的。Saxon document()函数不接受该页面上建议的URL格式(带有|字符等)。使用我上面建议的形式。我已经测试过了,它是有效的

  • 答案将取决于XSLT处理器、操作系统和文件系统。根据经验,您可能可以安全地使用file::protocol。此外,XSLT处理器是否支持目录也可能会影响结果。请告诉我们您的上下文(XSLT处理器等)。例如,在Saxon处理器上,您可以使用标准file::protocol引用任何文件,但前提是使用短文件名形式。如果使用长文件名,Saxon将找不到该文件。作为文件协议的替代方案,如果该文件通过http可用,则可以指定其