Вот этот:
<xsl:text disable-output-escaping="yes" />
Я натолкнулся на эту странную линию, и мне интересно, что она делает. Из того, что я понимаю, он выводит символ "пробел", а <strong>
(см. Ниже) хочет сделать его полужирным, но это звучит бесполезно. Что-то я не понимаю?
Вот фрагмент кода:
<xsl:choose>
<xsl:when test="prix = '0' ">
<strong>
<xsl:text disable-output-escaping="yes" />
</strong>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="prix" />
</xsl:otherwise>
</xsl:choose>
<xsl:text disable-output-escaping="yes" />
Из того, что я понимаю, он выводит "пробел"
Нет, нет. Он выводит пустую строку, т.е. ничего. В вашем примере, когда тест "prix = '0'
возвращает true, результирующее дерево будет содержать:
<strong/>
т.е. пустой strong
элемент.
является "значением" единственного способа вывода контента в шаблон?
Нет, конечно, нет: http://www.w3.org/TR/xslt#section-Creating-the-Result-Tree
Можно также использовать тег "xsl: text" для этого
Элемент xsl:text
может выводить только текстовый текст.
В моем примере нет конечного тега.
Он не нуждается в конечном теге, поскольку он пуст и "самозакрывается". Эта форма:
<xsl:text disable-output-escaping="yes" />
точно эквивалентен:
<xsl:text disable-output-escaping="yes" ></xsl:text>
Не вижу причин для этого.
Я подозреваю, что это могло быть добавлено предыдущим разработчиком, потому что в какой-то момент у них была какая-то полезная информация в этом элементе, но в конце концов она не нуждалась в ней, и решил, что только закрытие тега будет самым быстрым (хотя и не самым чистым) способом борьбы с ним.
Это удобно, если вам нужно вывести специальные символы, такие как амперсанд:
<div class="clear">
<xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
</div>
Объяснение из W3Schools:
Необязательный. "yes" означает, что специальные символы (например, "<") должны выводиться как есть. "no" указывает, что специальные символы (например, "<") должны выводиться как "<". По умолчанию "нет"