2

我在使用布尔数据类型的 xsl:when 语句时遇到问题。正如您所看到的,当我将布尔表达式与另一种数据类型一起使用并使用布尔表达式来测试属性“存在”(Phone/@Type)时,它可以工作,但是当我使用测试时... =“'true' " 表达式或相反,我得到两条记录的“否”或两条记录的“是”,而不是 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 否

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

4

1 回答 1

4

你在里面,for-each select="//Person"所以上下文节点是一个Person元素。因此,而不是

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

你只需要

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

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

于 2013-05-31T14:09:58.940 回答