Xslt 使用../的备选方案/
在我当前的配置中,我有一个include语句:Xslt 使用../的备选方案/,xslt,uri,Xslt,Uri,在我当前的配置中,我有一个include语句: <xsl:include href="../../../specialdata/anotherfolder/template.xslt"/> 我怎样才能在这里用一个表达式来表示:“沿路径遍历,直到达到文件夹'specialdata'所在的级别”在您的情况下,href属性只是一个URL,在您的情况下是一个相对URL。我认为URL没有搜索某个文件夹的方法 href属性只是一个URL,在您的例子中是一个相对URL。我认为URL没有搜索某
<xsl:include href="../../../specialdata/anotherfolder/template.xslt"/>
我怎样才能在这里用一个表达式来表示:“沿路径遍历,直到达到文件夹'specialdata'所在的级别”在您的情况下,
href
属性只是一个URL,在您的情况下是一个相对URL。我认为URL没有搜索某个文件夹的方法 href属性只是一个URL,在您的例子中是一个相对URL。我认为URL没有搜索某个文件夹的方法 不。相对URI无法做到这一点
不过,您可能会发现这样做很方便:
<xsl:include href="/specialdata/anotherfolder/template.xslt"/>
或
或者从模板所在站点的根开始,而不是从当前模板开始的其他内容
或者,这可能不太方便,这取决于模板的位置是如何构造的,它们是否在不同的位置作为一个组使用,等等。否。相对URI无法做到这一点 不过,您可能会发现这样做很方便:
<xsl:include href="/specialdata/anotherfolder/template.xslt"/>
或
或者从模板所在站点的根开始,而不是从当前模板开始的其他内容
或者,这可能不太方便,这取决于模板的位置是如何构造的,它们是否在不同的位置作为一个组使用,等等。我不(非常)同意前面的答案,有一些方法可以实现这一点,既有标准的(使用XSLT 3.0)也有依赖于处理器的(使用UriResolver
)对于较旧的处理器
使用XSLT 1.0和2.0:
通常,XSLT处理器允许您从任何位置返回某些内容
基于href
属性,使用UriResolver
。它取决于如何创建、编译和配置此类组件所使用的处理器。通常它意味着使用本机语言(java,C++,c~())来实现一个接口,并将转换配置为使用它作为默认的代码> uriRever
在为UriResolver
编写的代码中,您可以做任何您想做的事情,包括遍历不同的父目录以检查部分URI是否匹配
请记住,XSLT在这里不采用URL,而是采用URI。它的位置不是由URI预定义的,事实上,URI被称为具有到物理位置的映射,物理位置可以是文件、内存中的XML树、数据库字段等
使用XSLT 3.0,使用强大的阴影属性
或者,在XSLT 3.0中有一个属性(以下划线开头的属性可以采用在静态求值阶段处理的属性值模板)
影子属性的一个限制是它不能调用样式表函数(您用xsl:function
声明的那些),但是可以调用任何XPath函数,并且每个合法的XPath表达式也是合法的静态表达式
如果“静态可用文档”(可能受到处理器的限制)包括本地路径上的文档,则XSLT 3.0中可以使用以下内容:
<xsl:variable name="include"
static="yes"
select=" 'specialdata/anotherfolder/template.xslt' " />
<!-- note the underscore -->
<xsl:include _href="{
('../', '../../', '../../../')
[document-available(. || $include)][1]
|| $include }" />
上述代码段的工作原理如下:
- 创建一个静态变量,该变量必须在使用前声明,包含路径的已知部分
- 创建一系列相对父路径
- 当路径包含
template.xslt
- 返回第一个找到的
- 将点路径连接到
变量(使用XSLT 3.0$include
运算符)|
- 结果是包含包含文件的现有路径(或空序列,否则将产生错误)的字符串
- 阴影属性的结果成为真实属性的值
href
UriResolver
)
使用XSLT 1.0和2.0:
通常,XSLT处理器允许您从任何位置返回某些内容
基于href
属性,使用UriResolver
。它取决于如何创建、编译和配置此类组件所使用的处理器。通常它意味着使用本机语言(java,C++,c~())来实现一个接口,并将转换配置为使用它作为默认的代码> uriRever
在为UriResolver
编写的代码中,您可以做任何您想做的事情,包括遍历不同的父目录以检查部分URI是否匹配
请记住,XSLT在这里不采用URL,而是采用URI。它的位置不是由URI预定义的,事实上,URI被称为具有到物理位置的映射,物理位置可以是文件、内存中的XML树、数据库字段等
使用XSLT 3.0,使用强大的阴影属性
或者,在XSLT 3.0中有一个属性(以下划线开头的属性可以采用在静态求值阶段处理的属性值模板)
影子属性的一个限制是它不能调用样式表函数(您用xsl:function
声明的那些),但是可以调用任何XPath函数,并且每个合法的XPath表达式也是合法的静态表达式