在我当前的配置中,我有一个include语句:
<xsl:include href="../../../specialdata/anotherfolder/template.xslt"/>
如何在此处创建一个表达式:“遍历路径,直到您处于'specialdata'文件夹所在的级别?”
答案 0 :(得分:0)
href
属性只是一个URL,在您的情况下是一个相对URL。我不认为网址有某种搜索特定文件夹的方式。
答案 1 :(得分:0)
没有。使用相对URI无法做到这一点。
你可能会觉得做以下事情很方便:
<xsl:include href="/specialdata/anotherfolder/template.xslt"/>
或者
<xsl:include href="/templates/specialdata/anotherfolder/template.xslt"/>
或者从模板上找到的网站根目录开始的其他内容,而不是从当前模板开始。
或者这可能不太方便,取决于模板的方式&#39;位置是结构化的,无论它们是否在不同地点用作一组,等等。
答案 2 :(得分:0)
我(完全)同意以前的答案,有很多方法可以实现这一点,包括标准(使用XSLT 3.0)和处理器相关(使用UriResolver
)旧处理器。 / p>
通常,XSLT处理器允许您从任何位置返回内容
使用href
基于UriResolver
属性。它取决于您在如何创建,编译和配置此类组件时使用的处理器。通常它意味着使用本机语言(Java,C ++,C#)来实现接口并配置转换以将其用作默认UriResolver
的替代。
在为UriResolver
编写的代码中,您可以执行任何操作,包括遍历不同的父目录以检查部分URI是否匹配。
请记住,XSLT不会在此处获取URL,而是采用URI。它的位置不是由URI预定义的,事实上,URI被称为具有到物理位置的映射,物理位置可以是文件,内存中的XML树,数据库字段等。
或者,在XSLT 3.0中有一个cross-platform solution with shadow attributes(以下划线开头的属性可以采用在静态评估阶段处理的属性值模板。)
阴影属性的一个限制是它无法调用样式表函数(您使用xsl:function
声明的函数),但可以调用任何XPath函数,并且每个合法的XPath表达式也是合法的静态表达式。
以下适用于XSLT 3.0,前提是&#34;静态可用的文档&#34; (可能受处理器限制)包括本地路径上的文档:
<xsl:variable name="include"
static="yes"
select=" 'specialdata/anotherfolder/template.xslt' " />
<!-- note the underscore -->
<xsl:include _href="{
('../', '../../', '../../../')
[document-available(. || $include)][1]
|| $include }" />
上面的代码段如下:
template.xslt
||
运算符)$include
变量的虚线路径href
的值。注意,如果没有扩展函数,则无法检查目录是否存在,但在您的情况下,它很重要,因为如果目录存在,只有文件存在时调用才有意义,所以我们可以并检查整个路径。
支持影子属性的已知XSLT 3.0处理器是Exselt(.NET)和Saxon(主要是Java)。其他XSLT 3.0处理器(如XMLPrime和Altova Raptor(都支持非常局部的XSLT 3.0)不支持阴影属性。