xsl:表达式时使用boolean数据类型

时间:2013-05-31 14:07:13

标签: xslt

我在使用布尔数据类型的xsl:when语句时遇到问题。正如您所看到的,当我使用具有另一种数据类型的布尔表达式并使用布尔表达式来测试属性“存在”(Phone / @ Type)时,它可以工作,但是当我使用测试时... =“'true' “表达式或它相反我对两个记录都是”否“,对于两个记录都是”是“而不是1和1和1。我根据我在这里找到的答案尝试了一些测试表达式的变化。作为我正在做的练习的一部分,IsManager属性应该是布尔值,而不仅仅是测试它的表达式。

这是我的xml:

 <Person IsManager="true">
  <FirstName>Alex</FirstName>
  <LastName>Chilton</LastName>
  <Phone Type="Cell">555-1212</Phone>
  <IM>Alex1092</IM>

第二个记录:

<Person>
  <FirstName>Laura</FirstName>
  <LastName>Chilton</LastName>
  <Phone>555-5678</Phone>
  <IM>LaurethSulfate</IM>

这是xsl:

    <xsl:for-each select="//Person">
       <tr>
         <td><xsl:value-of select="FirstName"/></td>
         <td><xsl:value-of select="LastName"/></td>
        <xsl:choose> 
          <xsl:when test="boolean(Phone/@Type)">
             <td><xsl:value-of select="Phone/@Type"/></td>
          </xsl:when>
          <xsl:otherwise>
            <td>Home</td>
          </xsl:otherwise>
    </xsl:choose>
          <td><xsl:value-of select="Phone"/></td> 
          <td><xsl:value-of select="IM"/></td>
        <xsl:choose>     
          <xsl:when test="(Person/@IsManager)='true'">
            <td>Yes</td>  
          </xsl:when>   
          <xsl:otherwise>
            <td>No</td>      
          </xsl:otherwise>
        </xsl:choose>
       </tr>
    </xsl:for-each>

这是结果:

名字姓氏电话类型电话IM管理员 Alex Chilton Cell 555-1212 Alex1092没有 Laura Chilton Home 555-5678 LaurethSulfate No

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:4)

您在for-each select="//Person"内,因此上下文节点是Person元素。因此,而不是

<xsl:when test="(Person/@IsManager)='true'">

你需要

<xsl:when test="@IsManager='true'">

请注意,这不是与布尔值相比较,它将IsManager属性的值与字符串“true”进行比较。