XSL: проблема с вызовом шаблона - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть довольно простой шаблон XSL, который я вызываю из другого шаблона:

<xsl:call-template name="warningsTemplate">
                              <xsl:with-param name="ColName" select="Test Description" />
                            </xsl:call-template>

Шаблон:

 <xsl:template name="warningsTemplate">
    <xsl:param name="ColName"/>
    <xsl:for-each select="RejRow[count(Col/ValidationType)!=0]">
      <tr>
        <xsl:for-each select="Col[ColName=$ColName]">
          <xsl:choose>
            <xsl:when test="ValidationType='$ColName: Non-Numeric'">
              <td class="warningTd">
                <span class="warningRed">
                  <xsl:value-of select="ColValue"/>
                </span>
              </td>
            </xsl:when>
          </xsl:choose>
        </xsl:for-each>
      </tr>
    </xsl:for-each>
  </xsl:template>

Когда я вызываю этот шаблон, он показывает ошибкуна слово "Описание":

System.Xml.Xsl.XslTransformException: Expected end of the expression, found 'Description'.

Что здесь не так?

1 Ответ

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

Атрибут select для xsl:with-param ожидает выражение.Если вы пытаетесь передать текстовую строку, вам нужно заключить значение в апострофы, например, так:

<xsl:with-param name="ColName" select="'Test Description'" />

(Обратите внимание: если вы, например, сделали <xsl:with-param name="ColName" select="Test" />, вы бы не сталиесть ошибка. Хотя вы не получили бы ожидаемых результатов, так как в этом случае он бы искал элемент с именем Test в вашем XML.)

Также обратите внимание, чтоследующее выражение не будет работать для вас:

<xsl:when test="ValidationType='$ColName: Non-Numeric'">

Здесь оно будет буквально искать строку «$ ColName: Non-Numeric».Он не будет оценивать «$ ColName» как переменную внутри строки.Вам нужно сделать это ...

<xsl:when test="ValidationType=concat($ColName, ': Non-Numeric')">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...