Функциональность группы смежных в XSLT

У меня есть вопрос об использовании group-adjacent,

Я видел два образца:

Образец 1:

<xsl:for-each-group select="*" group-adjacent="boolean(self::p[@class = 'code'])">

Образец 2:

<xsl:for-each-group select="*" group-adjacent="@class">

Исходя из того, что используется, я заметил, что current-grouping-key() возвращает ложь

Какова цель использования булевой функции в group-adjancent?

2 ответа

Решение

С формой <xsl:for-each-group select="*" group-adjacent="boolean(self::p[@class = 'code'])"> ключ группировки является логическим значением, которое истинно для соседних p элементы, имеющие class атрибут со значением code пока со второй формой <xsl:for-each-group select="*" group-adjacent="@class"> значение группировки является строкой и объединяет все смежные элементы с одинаковыми class значения атрибута.

Так что это зависит от ваших потребностей, если у вас есть, например,

<items>
  <item class="c1">...</item>
  <item class="c1">...</item>
  <item class="c2">...</item>
</items>

Вы можете использовать второй подход для группировки на class значение.

С другой стороны, если вы хотите идентифицировать соседние p элементы с определенным class атрибут, например, в

<body>
  <h1>...</h1>
  <p class="code">...</p>
  <p class="code">...</p>
  <h2>...</h2>
  <p class="code">...</p>
</body>

тогда первый подход позволяет это.

Основываясь на том, что используется, я заметил, что current-grouping-key() возвращает false.

current-grouping-key() возвращает true или false, в зависимости от текущей группы. В вашем первом примере current-grouping-key() будет истинным для любой группы смежных p элементы класса "код", ложь для других групп.

Какова цель использования булевой функции в group-adjancent?

Без этого ключ группировки будет результатом оценки выражения self::p[@class = 'code'] который возвращает пустую последовательность, которая, в свою очередь, вызывает ошибку.

Другие вопросы по тегам