#xslt
#xslt
Вопрос:
Я хочу запустить это
<!-- This will remove the tag -->
<xsl:template name="remove-html">
<xsl:param name="text"/>
<xsl:choose>
<xsl:when test="contains($text, 'amp;<')">
<xsl:value-of select="normalize-space(substring-before($text, 'amp;<'))"/>
<xsl:text> </xsl:text>
<xsl:call-template name="remove-html">
<xsl:with-param name="text" select="normalize-space(substring-after($text, 'amp;>'))"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="normalize-space($text)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
и это
<xsl:choose>
<xsl:when test="string-length(header) > 22">
<xsl:value-of select="substring(header, 0, 22)" />
<xsl:text>amp;#8230;</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="header" />
</xsl:otherwise>
</xsl:choose>
вместе .. как я могу это сделать?
Комментарии:
1. вы имеете в виду, что хотите сопоставить верхний бит кода с
body
элементом, а нижний бит — сhead
элементом?2. Нет, я хочу запустить один фрагмент текста, чтобы удалить HTML и обрезать результат
3. Я не комментирую, правильный ли ваш подход или нет, но простая композиция двух действий может быть достигнута естественным путем путем записи выходных данных первого действия в переменную и применения второго действия к этой переменной.
Ответ №1:
<xsl:variable name="stripped">
<xsl:call-template name="remove-html">
<xsl:with-param name="text" select="???"/>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="string-length($stripped) > 22">
<xsl:value-of select="substring($stripped, 0, 22)" />
<xsl:text>amp;#8230;</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$stripped" />
</xsl:otherwise>
</xsl:choose>
Заменить ???
соответствующим узлом
Ответ №2:
Оберните ваш второй выбор в именованный шаблон, затем замените ваше значение-of в первом на шаблон вызова для него.