XSLT 文件的名称(不是输入 XML)
Name of the XSLT-File (not the input XML)
这是我的 XSLT 中的前两行:
<xsl:variable name="BaseUri" select="fn:base-uri()"/>
<xsl:variable name="DocumentURI" select="fn:document-uri(.)"/>
两个变量包含相同的内容,即已处理的 XML 文件的 URI。
如何获取 XSLT 文件的 URI?
试试这个:
<xsl:variable name="stylesheetURI" select="fn:document-uri(fn:document(''))"/>
这是仅 XSLT document
函数的一个奇怪特性,在此处的注释中进行了描述:
信息在 XSLT 1.0 中不可用,除非 (a) 使用供应商扩展,或 (b) 将信息作为参数传递给样式表。
在 XSLT 2.0 中,您可以使用 static-base-uri()
函数。
如果您使用像 Saxon-EE 这样的允许您部署已编译样式表的处理器,则会出现一些复杂情况;在那种情况下,规范没有明确定义 static-base-uri()
是给你源代码的位置还是编译代码的位置。此外,可能出于安全原因,实际上两者都不可用。所以这有点取决于系统。
另请注意,static-base-uri()
将根据您所在的样式表模块而改变,如果您使用 xml:base
或 XInclude
或外部实体,则规则会变得更加复杂。 .
非常感谢你们的快速回答。这两种方法都适用于我的 XSLT。
这些是结果:
<xsl:variable name="StyleSheet1" select="fn:document-uri(fn:document(''))"/>
<xsl:variable name="StyleSheet2" select="fn:static-base-uri()"/>
StyleSheet1: 文件:///D:/Tools/QS DF/QS-DF_0_76.xsl
StyleSheet2: 文件:/D:/Tools/QS%20DF/QS-DF_0_76.xsl
不幸的是,我似乎无法将这两个答案标记为有帮助或解决问题。
这是我的 XSLT 中的前两行:
<xsl:variable name="BaseUri" select="fn:base-uri()"/>
<xsl:variable name="DocumentURI" select="fn:document-uri(.)"/>
两个变量包含相同的内容,即已处理的 XML 文件的 URI。
如何获取 XSLT 文件的 URI?
试试这个:
<xsl:variable name="stylesheetURI" select="fn:document-uri(fn:document(''))"/>
这是仅 XSLT document
函数的一个奇怪特性,在此处的注释中进行了描述:
信息在 XSLT 1.0 中不可用,除非 (a) 使用供应商扩展,或 (b) 将信息作为参数传递给样式表。
在 XSLT 2.0 中,您可以使用 static-base-uri()
函数。
如果您使用像 Saxon-EE 这样的允许您部署已编译样式表的处理器,则会出现一些复杂情况;在那种情况下,规范没有明确定义 static-base-uri()
是给你源代码的位置还是编译代码的位置。此外,可能出于安全原因,实际上两者都不可用。所以这有点取决于系统。
另请注意,static-base-uri()
将根据您所在的样式表模块而改变,如果您使用 xml:base
或 XInclude
或外部实体,则规则会变得更加复杂。 .
非常感谢你们的快速回答。这两种方法都适用于我的 XSLT。
这些是结果:
<xsl:variable name="StyleSheet1" select="fn:document-uri(fn:document(''))"/>
<xsl:variable name="StyleSheet2" select="fn:static-base-uri()"/>
StyleSheet1: 文件:///D:/Tools/QS DF/QS-DF_0_76.xsl
StyleSheet2: 文件:/D:/Tools/QS%20DF/QS-DF_0_76.xsl
不幸的是,我似乎无法将这两个答案标记为有帮助或解决问题。