我有一个主xsl,它包含两个不同xsl的单独引用,如下所示,但问题是ThaT,当我转换它时引发异常
请告知我的主要xsl是否形成良好或我遗漏了什么......
<xsl:import href="qwe.xsl"/>
<xsl:import href="qrt.xsl"/>
<xsl:template match="/abml">
<cfabcmessage>
<defflows>
<xsl:variable name="ttSystem">
<xsl:call-template name=ttSystem_template"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="ttSystem = 'ABC'">
<xsl:call-template name="dgddsh_ABC"/>
</xsl:when>
<xsl:call-template name="hjsgscjkd_DEG"/>
</xsl:choose>
</defflows>
</cfabcmessage>
</xsl:template>
</xsl:stylesheet>
我已经完成了更正,但仍然在转换时我仍然得到这个错误..
21:03:34,892 ERROR [main] JAXPSAXProcessorInvoker - xsl:when is not allowed in this position in the stylesheet!;
答案 0 :(得分:1)
您在名称属性的以下行中缺少双引号:
<xsl:call-template name="ttSystem_template"/>
不确定您是否刚离开第一行,但您还需要以下内容:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
答案 1 :(得分:1)
您在ttSystem_template
之前错过了双引号,并且在xsl:call-template
的结束和xsl:when
的结束之间有xsl:choose
。将xsl:call-template
(1)移到xsl:when
内,(2)移到xsl:otherwise
内,或(3)移到xsl:choose
之外。 (您也错过了开始xsl:stylesheet
标记,但这可能只是一个复制粘贴错误。)
以下是XSLT的完整更正副本:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="qwe.xsl"/>
<xsl:import href="qrt.xsl"/>
<xsl:template match="/abml">
<cfabcmessage>
<defflows>
<xsl:variable name="ttSystem">
<xsl:call-template name="ttSystem_template"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="ttSystem = 'ABC'">
<xsl:call-template name="dgddsh_ABC"/>
<!-- 1. Want call to hjsgscjkd_DEG it here? -->
<xsl:call-template name="hjsgscjkd_DEG"/>
</xsl:when>
<!-- XXX Call to hjsgscjkd_DEG cannot go here. -->
<xsl:otherwise>
<!-- 2. Want call to hjsgscjkd_DEG it here? -->
<xsl:call-template name="hjsgscjkd_DEG"/>
</xsl:otherwise>
</xsl:choose>
<!-- 3. Want call to hjsgscjkd_DEG it here? -->
<xsl:call-template name="hjsgscjkd_DEG"/>
</defflows>
</cfabcmessage>
</xsl:template>
</xsl:stylesheet>
答案 2 :(得分:1)
关于新问题,目前尚不清楚何时要调用第二个“调用模板”,但如果这应该是“其他”条件,则需要使用'xsl:otherwise'
<xsl:choose>
<xsl:when test="ttSystem = 'ABC'">
<xsl:call-template name="dgddsh_ABC"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="hjsgscjkd_DEG"/>
</xsl:otherwise>
</xsl:choose>