XSL: невозможно заполнить значение в HTML на основе условия - PullRequest
0 голосов
/ 25 сентября 2019

У меня проблема с подготовкой правильного шаблона XSLT для заполнения значений в HTML.В моем случае я хочу заполнить значение столбца Test2 , если это был тип проверки для него.

Моя часть шаблона XSL:

<xsl:for-each select="CurrentFile/RejRow[Col/ValidationType='Task: Non-Numeric']">
<tr>
  <td>
     <span>
        <xsl:value-of select="Col/ColVal"/>
     </span>
  </td>
</tr>
</xsl:for-each>

И XMLis:

<CurrentFile>
    <RejRow>
        <Col>
            <ColName>Test1</ColName>
            <ColVal>TestVal1</ColVal>
        </Col>
        <Col>
            <ColName>Test2</ColName>
            <ColVal>TestVal2</ColVal>
            <ValidationType>Task: Non-Numeric</ValidationType>
        </Col>
    </RejRow>
</CurrentFile>

Обновление : мой текущий ответ не работает для ситуации, когда мне нужно проверить несколько столбцов с несколькими проверками и вывести только те, которые не прошли его,Все еще нужна помощь.

Этот подход не работает для меня:

<xsl:for-each select="RejRow[count(Col/ValidationType)!=0]">
<tr>
  <xsl:for-each select="Col[ColName='Test2']">
    <xsl:choose>
      <xsl:when test="Col[ValidationType='Task: Non-Numeric']">
        <td class="warningTd">
          <span class="warningRed">
            <xsl:value-of select="ColVal"/>
          </span>
        </td>
      </xsl:when>
      <xsl:when test="Col[count(ValidationType)=0]">
      <td class="warningTd">
        <span class="normal">
          <xsl:value-of select="ColVal"/>
        </span>
      </td>
    </xsl:when>
    </xsl:choose>
  </xsl:for-each>
</tr>
</xsl:for-each>

1 Ответ

1 голос
/ 25 сентября 2019

Предполагая, что вы хотите вывести <RejRow>, только если у него есть и <ValidationType>, и <Col> с <ColName>, равным Test2:

<xsl:template match="/CurrentFile">
  <table>
    <xsl:for-each select="RejRow[Col[ValidationType and ColName='Test2']]">
      <tr>
        <xsl:for-each select="Col[ColName='Test2']">
          <td class="warningTd">
            <span>
              <xsl:attribute name="class">
                <xsl:choose>
                  <xsl:when test="ValidationType = 'Task: Non-Numeric'">warningRed</xsl:when>
                  <xsl:otherwise>normal</xsl:otherwise>
                </xsl:choose>
              </xsl:attribute>
              <xsl:value-of select="ColVal" />
            </span>
          </td>
        </xsl:for-each>
      </tr>
    </xsl:for-each>
  </table>
</xsl:template>

Обратите внимание, что это будетсоздать несколько <td>, если существует более одного Col[ColName='Test2'].

Вывод:

<table>
   <tr>
      <td class="warningTd">
         <span class="warningRed">TestVal2</span>
      </td>
   </tr>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...