Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用递归xsl文件_Java_Xml_Xslt_Xsd - Fatal编程技术网

Java 使用递归xsl文件

Java 使用递归xsl文件,java,xml,xslt,xsd,Java,Xml,Xslt,Xsd,我一直在开发两个xsl(例如A和B)文件。A.xsl依赖于B.xsl。在B.xsl文件中,我硬编码了一些元素,之后它应该依赖于A.xsl。是否存在递归检查这两个xsl文件的方法 无论如何都有办法做到这一点。或者如果没有?如果不适用,请回答“否” 在这里,我对转换xml文件感兴趣,其中大多数xml元素都是公共的,然后我想开发一个xsl文件,该文件的元素与一个模板相同,并使用include从其他xsl文件调用它。然而,我被一个元素有必要的硬编码,然后将再次使用通用xsl的点绊住了。下面是一个示例:这

我一直在开发两个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>

不完全清楚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:import
xsl:include
元素、
xsl:template
上的
priority
属性以及导入优先级的概念。

我真的不明白您的意思。是否要调用包含B.xsl的a.xsl,其中包含a.xsl itsef?我认为这个链接可能会有所帮助:看起来你需要一个C.xsl。但是您可以更详细地说明您的问题,“检查这两个xsl文件”是什么意思?当您说“引用中间的另一个xsl文件”。。。在什么和什么之间?