2012-08-31 61 views
0

我一直在开发两个xsl(比如说A和B)文件。 A.xsl依赖于B.xsl。并且在B.xsl文件中,我对某些元素进行了硬编码,之后它应该取决于A.xsl。无论如何递归检查这两个xsl文件。使用递归xsl文件

有没有办法做到这一点。或者如果不是?如果不适用,请说出你的答案。

这里我介绍了转换xml文件,其中大多数xml元素是常见的,然后我认为要开发一个xsl文件,它具有一个模板的共同元素,并使用include从其他xsl文件调用它。但是,我在一个元素具有必要的硬编码的地方停滞不前,然后再次使用通用的xsl。下面是例子:这个例子是通用的,我不想在每次使用其他许多xsls开发时使用通用xsl文件进行硬编码。

这是输入xml的示例。

<element> 
    <subelement></subelement> 
</element> 

这是输出xml的示例。

<element> 
    <element2></element2> 
    <subelement></subelement2> 
</element> 

这是A.xsl

<xsl:inculde href="B.xsl"> 
<xsl:call-template name="ele"/> 

这是B.xsl

<xsl:template name="ele"> 
<xsl:copy-of select="element"/> 
</xsl:template> 
+3

我真的不明白你的意思。你想调用A.xsl,其中包含B.xsl,包括A.xsl itsef?我认为这个链接可能有所帮助:http://www.apply-templates.com/blog/xsl-include-vs-import –

+1

像你这样的reeks需要一个C.xsl。但是你可以更详细地陈述你的问题。 –

+0

“检查这两个xsl文件”是什么意思?而当你说“把其他的xsl文件介于两者之间”时......介于什么和什么之间? – LarsH

回答

1

您A.xsl和B.xsl是依赖的意思这不是完全清楚但听起来好像您可能正在寻找一种方法来维护两个或更多样式表,用于两个转换任务,这两个转换任务有许多共同的行为,但在某些方面有所不同。

为了具体,我会假设你有两个转换,我会称之为红色和绿色(以避免与A和B混淆,它们可能是也可能不是完全相同的东西),其具有以下特性:

  • 许多元素(比如元素C1,C2,... Cn)在两次转换中的处理方式都是相同的。
  • 某些元素(D1,D2,... Dn)的处理方式不同。
  • 此外,可能存在仅在红色变换的输入中可见的元素R1,R2,... Rn以及仅在输入到红色变换的输入中看到的G1,G2,... Gn绿色变革。

有几种方法可以在XSLT中构建红色和绿色变换。最简单的两个解释是这些。 (1)制作三个样式表:C.xsl(用于常用元素),R.xsl(用于R元素和D元素的红色变换),G.xsl(用于G元素的绿色变换)和D元素)。 R.xsl和G.xsl分别包含或导入C.xsl,因此具有单一处理方法的通用元素的代码仅在一处编写和维护。

(2)制作两个样式表。 Red.xsl定义完整的Red转换;它涵盖了常见元素C1,C2等,具有不同处理的元素(D1,D2等)以及红色变换(R1,R2等)特有的元素。它什么都不输入。

Green.xsl导入Red.xsl并包含D和G元素的模板。因为它没有C元素的模板,所以C元素在Green变换中的处理方式与Red变换中的处理方式相同。因为Green.xsl是Green转换的主要样式表,所以D元素的Green.xsl模板对于相同元素的优先级高于Red.xsl模板。 R元素的模板也将被导入,但由于输入中不存在R元素,因此它们不会匹配,也不会造成伤害。

你需要在任何好的参考书(或XSLT规范,这是完全可读技术散文)读了哪些xsl:importxsl:include元素,在xsl:templatepriority属性,导入优先的概念。