0

我一直在开发两个 xsl(例如 A 和 B)文件。A.xsl依赖于B.xsl。在B.xsl文件中,我对一些元素进行了硬编码,之后它应该依赖于A.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>
4

1 回答 1

1

尚不完全清楚 A.xsl 和 B.xsl相互依赖是什么意思,但听起来您可能正在寻找一种方法来为两个在常见但在某些方面有所不同。

具体而言,我将假设您心中有两个转换,我将它们称为红色和绿色(以避免将它们与您的 A 和 B 混淆,它们可能完全相同,也可能不完全相同),它们具有财产:

  • 许多元素(例如,元素 C1、C2、... Cn)在两个变换中的处理方式相同。
  • 某些元素(D1、D2、... Dn)的处理方式不同。
  • 此外,可能存在仅在 Red 变换的输入中可见的元素 R1、R2、...Rn 和仅在 Green 变换的输入中可见的 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 等)以及 Red 变换特有的元素(R1、R2 等)。它什么也不进口。

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

您需要在任何好的参考书(或 XSLT 规范,它是完全可读的技术散文)中阅读的内容是xsl:importandxsl:include元素、priorityon 属性和导入优先级xsl:template的概念。

于 2012-09-13T18:55:40.187 回答