我正在寻找从第一个 XSLT 调用第二个 XSLT 的可能性。
我的 XML 输入看起来像
<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>
Run Code Online (Sandbox Code Playgroud)
我想做的是
<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>
Run Code Online (Sandbox Code Playgroud)
每个“sub-xslt”都应接受完整的输入并对其进行处理,包括创建一个特殊的命名文件。
由于在网上搜索解决方案或提示没有成功。这是可能的吗?甚至是明智的?
甚至是明智的?
不,考虑在程序上调用 XSLT 是不明智的,但是您提出这个问题是一个好兆头,表明您意识到可能有更好的方法......
不要从“调用”其他 XSLT 的角度考虑程序。而是根据输入的模式匹配进行声明式思考。
为了
<Subject name ="A1" type="a"/>
Run Code Online (Sandbox Code Playgroud)
而是思考
if type = "a" call "XSL_A" with above XML-Input思考
Subjectwho @typeis 时"a",输出something或者,在 XSLT 中,
<xsl:template match="Subject[@type='a']>
<something id="{@name}"/>
</xsl>
Run Code Online (Sandbox Code Playgroud)
以便
<Subject name ="A1" type="a"/>
Run Code Online (Sandbox Code Playgroud)
被翻译成
<something id="a"/>
Run Code Online (Sandbox Code Playgroud)
在输出中。
与上述匹配驱动设计方法正交,可以组织和组合 XSLT 文件。使用xs:include在另一个样式表使作为一个你写的一个单独部分; 用于xs:import引入另一个样式表,例如或基于您正在编写的样式表,以便您想覆盖模板。
有关xs:includevs 的更多详细信息xs:import,请参阅:
xs:importvs xs:include.xsl:use-when可以添加到xs:import(xs:include或任何其他 XSLT 指令)的属性。最后,与上述两个维度正交,XSLT 支持控制模板适用性的模式。有关模式的更多信息,请参阅可以给我一个 xsl 中模板“模式”的示例吗?