首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从XSLT调用XSLT?

如何从XSLT调用XSLT?
EN

Stack Overflow用户
提问于 2016-07-22 18:46:00
回答 2查看 2.2K关注 0票数 3

我正在寻找从第一个XSLT调用第二个XSLT的可能性。

我的XML输入看起来像这样

代码语言:javascript
复制
<xml>
  <Subject name ="A1" type="a">
  <Subject name ="B2" type="b">
  <Subject name ="C1" type="c">
  <Subject name ="A2" type="a">
  <Subject name ="B1" type="b">
  <Subject name ="C2" type="c">
  <Subject name ="A3" type="a">
</xml>

我想要做的事情是

代码语言:javascript
复制
<xsl>
 if type = "a" call "XSL_A" with above XML-Input
 if type = "b" call "XSL_B" with above XML-Input
 if type = "c" call "XSL_C" with above XML-Input

 Do-Something with above XML-Input
<xsl>

每个“子xslt”都应该接受完整的输入,并对其执行一些操作,包括创建一个特殊的命名文件。

因为在网络上搜索解决方案或提示并不成功。这有可能做到吗?或者甚至是明智的?

EN

回答 2

Stack Overflow用户

发布于 2016-07-22 20:41:13

,甚至是明智的?

不,考虑以过程化方式调用XSLT是不明智的,但是您提出这个问题是一个好兆头,表明您认识到可能有更好的方法……

模式匹配

不要从“调用”其他XSLT的角度来考虑过程性问题。相反,根据与输入匹配的模式来考虑声明性。

代码语言:javascript
复制
<Subject name ="A1" type="a"/>

相反,你会认为

  • if type = "a" call "XSL_A" with above XML-Input

  • 当匹配Subject@type"a"时,输出something

或者在XSLT中,

代码语言:javascript
复制
<xsl:template match="Subject[@type='a']>
    <something id="{@name}"/>
</xsl>

所以

代码语言:javascript
复制
<Subject name ="A1" type="a"/>

被翻译成

代码语言:javascript
复制
<something id="a"/>

在输出中。

XSLT文件组织

与上面的匹配驱动设计方法正交,可以组织和组合XSLT文件。使用xs:include引入另一个样式表,将其作为正在编写的样式表的单独部分;使用xs:import引入另一个样式表,如您正在编写的样式表,或者基于您正在编写的样式表,以便覆盖模板。

有关xs:includexs:import的更多详细信息,请参阅:

  • Combining Stylesheets with Include and Import
  • Tip: Use imports and includes to override XSLT templates要很好地概述 Recommendation.
  • For XSLT2.0中的instruction).

xs:include.

  • Combining Stylesheets之间的关系,请考虑xsl:use-when属性,该属性可以添加到xs:import (或xs:include或任何其他XSLT

模式

最后,与上述两个维度正交的是,XSLT支持控制模板适用性的模式。有关模式的更多信息,请参见Can one give me the example for “mode” of template in xsl

票数 6
EN

Stack Overflow用户

发布于 2016-07-22 18:52:15

如果真的想动态调用XSLT样式表,那么需要使用带有https://www.w3.org/TR/xpath-functions-31/#func-transform函数的XSLT3.0。另一方面,你用上面的XML-Input发布的if type = "a" call "XSL_A"看起来像是一个可能的基于模板的匹配搜索,另外还有<xsl:template match="Subject[@type = 'a']" mode="a">...</xsl:template>模式,然后你可以为每个模式编写模块,并将它们包含/导入到主样式表中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38524500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档