将大型xslt拆分为小型xslt
我有一个很大的xslt文件,在部署过程中会出现问题 com.sun.org.apache.bcel.internal.generic.ClassGeneException:分支目标偏移量太大,不能短 位于com.sun.org.apache.bcel.internal.generic.BranchInstruction.dump(BranchInstruction.java:99) 在com.sun.org.apache.bcel.internal.generic.InstructionList.getByteCode(InstructionList.java:980)上 在com.sun.org.apache.bcel.internal.generic.MethodGen.getMethod(MethodGen.java:616)上 位于com.sun.org.apache.xalan.internal.xsltc.compiler.Mode.compileNamedTemplate(Mode.java:556) 位于com.sun.org.apache.xalan.internal.xsltc.compiler.Mode.compileTemplates(Mode.java:566) 位于com.sun.org.apache.xalan.internal.xsltc.compiler.Mode.compileApplyTemplates(Mode.java:818) 位于com.sun.org.apache.xalan.internal.xsltc.compiler.Stylesheet.compileModes(Stylesheet.java:615) 位于com.sun.org.apache.xalan.internal.xsltc.compiler.Stylesheet.translate(Stylesheet.java:730) 位于com.sun.org.apache.xalan.internal.xsltc.compiler.xsltc.compile(xsltc.java:370) 位于com.sun.org.apache.xalan.internal.xsltc.compiler.xsltc.compile(xsltc.java:445) 为此,我需要将这个较大的xslt拆分为较小的xslt。 我见过xsl:include标记,但它似乎适用于单独的模板 在我的例子中,它是一个具有多个赋值的单亲标记,如下所示将大型xslt拆分为小型xslt,xslt,split,Xslt,Split,我有一个很大的xslt文件,在部署过程中会出现问题 com.sun.org.apache.bcel.internal.generic.ClassGeneException:分支目标偏移量太大,不能短 位于com.sun.org.apache.bcel.internal.generic.BranchInstruction.dump(BranchInstruction.java:99) 在com.sun.org.apache.bcel.internal.generic.InstructionList
<xsl:template match="/">
<ns5:taskListResponse>
<xsl:for-each select="/tns:taskListResponse/task:task">
<ns7:task>
<xsl:if test="task:title">
<ns7:title>
<xsl:value-of select="task:title"/>
</ns7:title>
</xsl:if>
<xsl:if test="task:taskDefinitionURI">
<ns7:taskDefinitionURI>
<xsl:value-of select="task:taskDefinitionURI"/>
</ns7:taskDefinitionURI>
</xsl:if>
<xsl:if test="task:creator">
<ns7:creator>
<xsl:value-of select="task:creator"/>
</ns7:creator>
</xsl:if>
........100 more tags like this.....
...................
</xsl:for-each>
</ns5:taskListResponse>
……100多个这样的标签。。。。。
...................
如何拆分此xsl?
我想在另一个文件中放置一些标记,并将它们包含在
谢谢你的帮助
问候
Ravi < P>我会考虑把它分成单独的模板,例如每个IF测试都可以被“代码>应用模板< /Cube >替换,以及下面的模板来完成这项工作:
<xsl:template match="task:*">
<xsl:element name="ns7:{local-name()}">
<xsl:value-of select="." />
</xsl:element>
</xsl:template>
如果您不需要重新排序子项,那么整个样式表可以归结为
<xsl:template match="/">
<ns5:taskListResponse>
<xsl:apply-templates select="/tns:taskListResponse/task:task" />
</ns5:taskListResponse>
</xsl:template>
<xsl:template match="task:task">
<ns7:task><xsl:apply-templates select="*" /></ns7:task>
</xsl:template>
<xsl:template match="task:*">
<xsl:element name="ns7:{local-name()}">
<xsl:value-of select="." />
</xsl:element>
</xsl:template>
如果您确实需要重新订购物品,它会变得稍微复杂一些,那么您将需要100个单独的
来代替
,但它仍然更小、更模块化。谢谢您的回复。在应用时,您给出的xsl仅复制具有名称空间前缀的第一级元素。如果一个元素有子元素,那么该子元素中的所有值都将作为一个标记进行复制。我想复制整个结构,就像它使用名称空间前缀一样。此外,还有一些属性的子项具有不同的名称空间,例如ns9。在这种情况下,我们该怎么办。基本上,我希望ns1替换为ns1',ns2替换为ns2',等等。请告知您的response@user3580661我只能继续您在问题中提出的内容-您的示例只处理task:task
的第一级子级,并且所有结果都进入同一名称空间。为了继续处理子元素,您可能希望在相关元素上使用
而不是
,并且为了处理其他名称空间,您可以为ns2:
添加类似的模板,生成
等。