使用递归xsl文件

时间:2012-08-31 19:28:47

标签: java xml xslt xsd

我一直在开发两个xsl(例如A和B)文件。 A.xsl 依赖于 B.xsl 。在 B.xsl 文件中,我对一些元素进行了硬编码,之后它应该依赖于 A.xsl 。无论如何还是以递归方式检查这两个xsl文件。

无论如何都要这样做。或者如果没有?如果不适用,请说出你的答案。

这里我有兴趣转换xml文件,其中大多数xml元素是常见的,然后我想开发一个xsl文件,其中包含一个模板共有的元素,并使用include从其他xsl文件调用它。但是,我被困在一个元素有必要硬编码的点,然后再次使用通用xsl。下面是一个例子:这个例子是通用的,我不希望每当我使用许多其他要开发的xsl时对通用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>

1 个答案:

答案 0 :(得分: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.xsl是绿色转换的主要样式表,因此对于相同的元素,D元素的Green.xsl模板将具有比Red.xsl模板更高的优先级。 R元素的模板也将被导入,但由于输入中没有R元素,它们将不匹配任何内容并且不会造成伤害。

您需要在任何好的参考书(或XSLT规范,这是完全可读的技术散文)中阅读的内容是xsl:importxsl:include元素,priority属性在xsl:template上,以及导入优先级的概念