我有一个大的xslt文件在部署期间出现问题
com.sun.org.apache.bcel.internal.generic.ClassGenException:分支目标偏移量太大而不是简短 在com.sun.org.apache.bcel.internal.generic.BranchInstruction.dump(BranchInstruction.java:99) at com.sun.org.apache.bcel.internal.generic.InstructionList.getByteCode(InstructionList.java:980) 在com.sun.org.apache.bcel.internal.generic.MethodGen.getMethod(MethodGen.java:616) at com.sun.org.apache.xalan.internal.xsltc.compiler.Mode.compileNamedTemplate(Mode.java:556) at 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) at com.sun.org.apache.xalan.internal.xsltc.compiler.Stylesheet.compileModes(Stylesheet.java:615) at 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标签,但看起来这适用于单独的模板。
在我的情况下,它是一个包含多个分配的单个父标记,如
<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>
如何分割这个xsl? 我想在另一个文件中放入一些标签,并将其包括在内 感谢您的帮助
此致 拉维
答案 0 :(得分:1)
我会考虑将其拆分为单独的模板,例如,每个if测试都可以替换为apply-templates
,并使用以下模板来完成工作:
<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:apply-templates select="task:foo" />
代替<xsl:apply-templates select="*" />
,但它仍然更小,更模块化。