Справка по условию XSLT If

#xml #xslt #dom #if-statement

#xml #xslt #dom #if-оператор

Вопрос:

У меня есть XML и XSLT. Я хочу использовать условие if, чтобы проверить, равен ли элемент 0, если это так, то скрыть его, т. е. ничего не отображать. ЕСЛИ найдено значение 0, просто отобразите пустую ячейку.

Вот основная концепция:

XML

  <Sheet1>
     <Build>0</Build>
     <Item>X</Item>
     <T1>0:06:00</T1>
     <T2>0:14:15</T2>
     <T3>0:07:22</T3>
 </Sheet1>
  

XSLT

 <table border="1">
    <tr bgcolor="#dccdc">
        <th align="center">Build</th>
        <th align="center">Item</th>
        <th align="center">T1</th>
        <th align="center">T2</th>
        <th align="center">T3</th>
    </tr>  

    <xsl:for-each select="Sheet1">
        <tr>
            <td bgcolor="#F2F5A9">
                <xsl:value-of select="Build" />
            </td>
            <td bgcolor="#F2F5A9">
                <xsl:value-of select="Item" />
            </td>
            <td bgcolor="#F2F5A9">
                <xsl:value-of select="T1" />
            </td>
            <td bgcolor="#F2F5A9">
                <xsl:value-of select="T2" />
            </td>
            <td bgcolor="#F2F5A9">
                <xsl:value-of select="T3" />
            </td>
         </tr>
     </xsl:for-each>
</table>
  

Что я хочу сделать, так это когда Build element = 0, я хочу, чтобы он ничего не печатал, поэтому я попытался поместить xsl: if вокруг элемента в XSLT:

 <xsl:if test="Build!='0'">
    <td bgcolor="#F2F5A9">
        <xsl:value-of select="Build" />
    </td>
</xsl:if>
  

но, похоже, это не работает, я получаю пустой выходной файл.

есть идеи?

Ответ №1:

Самое простое решение — написать

     <td bgcolor="#F2F5A9">
        <xsl:value-of select="Build[. != 0]" />
    </td>
  

Ответ №2:

Правильный подход также (фрагмент):

   <td bgcolor="#F2F5A9">
    <xsl:if test="Build[text()!='0']">
      <xsl:value-of select="Build" />
    </xsl:if>
  </td>
  

Комментарии:

1. на самом деле я все еще хочу, чтобы строка была добавлена, я просто хочу видеть пустую ячейку, а не 0 в ячейке, если вы понимаете, что это значит.

2. хорошо, я изменил отображение пустой ячейки. Фрагмент @Michael-Kay также должен работать нормально. Тогда в чем проблема?