关于格式良好的xsl

时间:2013-10-23 14:41:51

标签: xslt xslt-1.0

我有一个主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!;

3 个答案:

答案 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>