xslt中的条件检查问题

时间:2014-03-04 10:52:54

标签: xml xslt

下面是我的xml

       <ServiceIncident xmlns="http://b2b.ibm.com/schema/IS_B2B_CDM/R2_2">
             <Asset>
             <Asset_Tag>900</Asset_Tag> 
             </Asset>
         <ConfigItem>
       <CINum>1024</CINum> 
         </ConfigItem>

以下是条件

       if Asset_Tag < 1000, do not map the Asset element at all, but do map ConfigItem

       if Asset_Tag > 1000, do not map the ConfigItem at all,but do map Asset_Tag

对于上述两个条件,我编写了以下xsl代码

    <xsl:template match="r2:Asset/r2:Asset_Tag">
    <xsl:copy>
    <xsl:choose>
        <xsl:when test="r2:Asset_Tag &lt; 1000">
         <xsl:value-of select="r2:ConfigItem/r2:CINum" />           
         </xsl:when>
        <xsl:otherwise>
        <xsl:value-of select="r2:Asset/r2:Asset_Tag" />
        </xsl:otherwise>
    </xsl:choose> 
    </xsl:copy>         
    </xsl:template>

请帮我解决这个问题

1 个答案:

答案 0 :(得分:0)

您位于匹配Asset_Tag元素的模板中,但您的xpath表达式被编写为上下文节点为ServiceIncident。尝试更像这样的东西:

    <xsl:when test=". &lt; 1000">
     <xsl:value-of select="../../r2:ConfigItem/r2:CINum" />           
     </xsl:when>
    <xsl:otherwise>
    <xsl:value-of select="." />
    </xsl:otherwise>

但将逻辑划分为其他模板或更改现有模板以匹配ServiceIncident可能更有意义,如果没有看到更多样式表,就无法说出来。