Перейти к содержанию

xsl:where-populated

Используется для того, чтобы сделать условное построение контента потоковым. Используется для того, чтобы избежать вывода элемента обертки, если у него нет дочерних элементов.

Доступно в XSLT 3.0. Начиная с Saxon 9.8, доступен во всех редакциях. Реализовано в Saxon-PE и Saxon-EE начиная с Saxon 9.7.

  • Категория: инструкция
  • Содержимое: sequence-constructor
  • Допустимые родительские элементы: any XSLT element whose content model is sequence-constructor; any literal result element
  • Элемент не имеет атрибутов

Заметки по реализации Saxon

Новый в XSLT 3.0 и реализованный начиная с Saxon 9.7.

Подробности

Содержащийся конструктор последовательности оценивается обычным образом, но любой элемент в результате работы конструктора последовательности, который "считается пустым", отбрасывается. Примерами элементов, которые "считаются пустыми", являются элементы без дочерних элементов (даже если у них есть атрибуты), а также узлы и атомарные значения, строковое значение которых имеет нулевую длину. Узлы документов считаются пустыми, если у них нет дочерних элементов, а также пустые карты и массивы. Текстовые узлы, содержащие пробельные символы, НЕ считаются пустыми.

Чаще всего инструкция имеет одну дочернюю инструкцию, которая создает узел элемента; узел элемента отбрасывается, если он не имеет содержимого.

Хотя эта инструкция была придумана для того, чтобы сделать код потоковым, она может быть одинаково удобна и в непотоковых приложениях.

Примеры

Следующий код генерирует элемент обертки для непустой последовательности, однако он не является гарантированно-потоковым, поскольку обрабатывает дочерние элементы event более одного раза:

1
2
3
4
5
<xsl:if test="exists(event)">
    <events>
        <xsl:copy-of select="event"/>
    </events>
</xsl:if>

Чтобы сделать его потоковым, его можно переписать с помощью инструкции xsl:where-populated:

1
2
3
4
5
<xsl:where-populated>
    <events>
        <xsl:copy-of select="event"/>
    </events>
</xsl:where-populated>

Ссылки

См. также

Комментарии