Функциональность группы смежных в 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']
который возвращает пустую последовательность, которая, в свою очередь, вызывает ошибку.