Передать строку в параметр шаблона, который ожидает узел? - PullRequest
2 голосов
/ 16 февраля 2010

Итак, У меня есть шаблон XSLT, который ожидает узел в качестве параметра и использует его в качестве отображаемого текста. Однако иногда этот узел является пустым в XML, и я хочу передать отображаемый текст по умолчанию вместо отображаемого текста вместо:

Работает:

<xsl:call-template name="myTemplate">
    <xsl:with-param name="parm1" select="//element">
</xsl:call-template>

Не работает:

<xsl:variable name="dispText">
    <xsl:choose>
        <xsl:when test="string-length(//element) = 0">
            <xsl:value-of select="'Default Text'" />
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="//element" /> 
        </xsl:otherwise>
    </xsl:choose>
</xsl:variable>

<xsl:call-template name="myTemplate">
    <xsl:with-param name="parm1" select="$dispText">
</xsl:call-template>

Есть идеи, как мне это сделать? Я перепробовал все виды вещей без удачи: (

Кажется, что все, что мне нужно сделать, это создать новый узел с отображаемым текстом, который я хочу, но я не знаю, возможно ли это вообще?

Спасибо

Ответы [ 2 ]

2 голосов
/ 17 февраля 2010

Реализуйте обработку по умолчанию в шаблоне, потому что это то, где он принадлежит. Вызывающая сторона должна быть последовательной и не иметь побочных эффектов на поведение шаблона (т. Е. Вы не должны иметь возможность «забыть» передачу значения по умолчанию).

<xsl:template name="myTemplate">
  <xsl:param name="parm1" /><!-- node set expected! -->

  <!-- actual value or default -->
  <xsl:variable name="value1">
    <xsl:choose>
      <xsl:when test="not($parm1 = '')">
        <xsl:value-of select="$parm1" />
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$default1" />
      </xsl:otherwise>
    </xsl:choose>
  </xsl:variable>

  <!-- work with $value1 from this point on -->
</xsl:template>
0 голосов
/ 16 февраля 2010

Я предполагаю, что // элемент является набором узлов, и использование string-length () для него может быть недопустимым Попробуйте сначала преобразовать его в строку ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...