如果条件内部如果条件在xslt

时间:2015-06-23 15:43:20

标签: xml xslt

我不能在条件里面使用if。我想检查第二个条件,如果第一个通过,

 <cc>
    <xsl:variable name="UpperNode" select="(substring-before(//Node1/@SubMan, ' -'))"/>
    <xsl:if test="contains($UpperNode,'CUBE')">
        <xsl:if test="not(//CubeNode/@att = 'NORMAL')">
            <ERROR Significiance="U can't draw it" ErrorCode="Sket" ErrorType="Error" Template="Arts.xsd"/>
            <action_on_error>
                <msg_box/>
            </action_on_error>
        </xsl:if>
    </xsl:if>   
</cc>

即使UpperNode为CUBE且CubeNode / @ att为NORMAL,也不会弹出消息框。如何检查这种情况。

2 个答案:

答案 0 :(得分:1)

第二个测试表达式中有一个拼写错误://CubeNode/&att。请参阅&

答案 1 :(得分:0)

这是一个显示您的问题错误的示例。也许你会在这里看到一些解决方案:

输入XML:

    <stuff>
        <test1>
            <Node1 SubMan="CUBE - Stuff"/>
            <CubeNode att='NOT NORMAL'/>        
        </test1>
        <test2>
            <Node1 SubMan="CUBE - Stuff"/>
            <CubeNode att='NORMAL'/>   
        </test2>
    </stuff>

测试XSL:

   <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
       version="1.0">
       <xsl:output indent="yes"/>
       <xsl:template match="/">
           <results>
               <xsl:call-template name="optest">
                   <xsl:with-param name="test" select="//test1"/>
               </xsl:call-template>
               <xsl:call-template name="optest">
                   <xsl:with-param name="test" select="//test2"/>
               </xsl:call-template>
           </results>
       </xsl:template>
       <xsl:template name="optest">
           <xsl:param name="test"/>
           <cc>
               <xsl:variable name="UpperNode" select="(substring-before(//Node1/@SubMan, ' -'))"/>
               <xsl:if test="contains($UpperNode,'CUBE')">
                   <xsl:message><xsl:value-of select="$test/CubeNode/@att"/></xsl:message>
                   <xsl:if test="not($test/CubeNode/@att[. = 'NORMAL'])">
                       <ERROR Significiance="U can't draw it" ErrorCode="Sket" ErrorType="Error" Template="Arts.xsd"/>
                       <action_on_error>
                           <msg_box/>
                       </action_on_error>
                   </xsl:if>
               </xsl:if>   
           </cc>
       </xsl:template>
   </xsl:stylesheet>

输出:

<results>
 <cc>
  <ERROR Significiance="U can't draw it" ErrorCode="Sket" ErrorType="Error" Template="Arts.xsd"/>
  <action_on_error>
     <msg_box/>
  </action_on_error>
</cc>
<cc/>
</results