使用XSL获取文件名

16

如何在xsl 1.0中获取文件名?

我尝试了

<xsl:value-of select="base-uri()" />

但是得到了"致命错误!找不到函数:base-uri"

2个回答

36

base-uri()是一个标准的XPath 2.0函数,因此在运行XSLT 1.0时,将无法使用此函数。

在XSLT 1.0中,文件名(是什么文件名?)可以作为转换的参数传递。

请注意,并非总是有可能为样式表或XML文档生成文件名--其中任一项或两项都可能存在于内存中而没有关联的文件。

从问题中不清楚必须生成哪个文件名。

以下是如何在XPath 2.0/XSLT 2.0中找到文件名的方法:

当前文档的文件名:

 base-uri()

当前样式表模块的文件名:

  base-uri(document(''))

17

在XSLT v1/XPath v1中没有这样的XPath函数或XSLT扩展来执行此操作。

文件可能不存在,即使存在文件,也没有理由让XSLT引擎知道该文件名(考虑将文件内容加载到缓冲区中,将缓冲区解析为DOM,然后将DOM传递给XSLT处理器)。

您需要将文件名作为参数传递给处理器,在转换中可以使用。


1
如果你只想要一个“使用样式表x创建”的注释,那就很烦人了 :-( - Chris Huang-Leaver
4
在XPath 2.0中有这样一个函数(请参见另一个答案)。 - Norman Gray
3
问题的结尾表明这是XSLT v1,因此出现V2函数是无关紧要的。 - Richard
1
@Richard:啊哈,非常正确——我没有在问题中注意到这个限定条件(不幸的是,除非答案被编辑,否则我似乎无法取消投票)。 - Norman Gray
@NormanGray:有一个明显的错别字,而澄清从来没有坏处,现在已经编辑过了。 - Richard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接