Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
将大型xslt拆分为小型xslt_Xslt_Split - Fatal编程技术网

将大型xslt拆分为小型xslt

将大型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

我有一个很大的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标记,但它似乎适用于单独的模板

在我的例子中,它是一个具有多个赋值的单亲标记,如下所示

<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:
添加类似的模板,生成
等。