XSLT индекс групп, созданных для каждой группы - PullRequest
0 голосов
/ 28 сентября 2019

Мне нужно разделить длинную таблицу на меньшие таблицы, используя for-each-group с атрибутом group-end-with.Внутри каждой таблицы мне нужен индекс этой группы, но я не могу выяснить, какая переменная доступна для этого - если она есть.

Пример xml:

<table>
  <row type='A'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='A'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='A'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='A'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
</table>

Желаемый вывод:

<table>
  <title>Table 1</title>
  <row type='A'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
</table>
<table>
  <title>Table 2</title>
  <row type='A'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
</table>
<table>
  <title>Table 3</title>
  <row type='A'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
</table>
<table>
  <title>Table 4</title>
  <row type='A'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
  <row type='B'><cell>Some value</cell>
</table>

Группировка завершена, но я не могу найти способ получить индекс для включения в заголовки таблиц.Возможно, это тривиально, но группа и индекс поисковых слов не дают никакого полезного результата.

1 Ответ

2 голосов
/ 28 сентября 2019

Используйте функцию position().

Нет кода, поскольку код не был предоставлен - и ни входные данные примера, ни ожидаемый результат не являются правильно сформированным XML.

(Дополнение от Michael Kay): последний абзац §14.1 https://www.w3.org/TR/xslt-30/#element-for-each-group гласит: -

"Конструктор последовательности, содержащийся в элементе xsl: for-each-group, вычисляется один раздля каждой из групп, в порядке обработки. Последовательности, которые в результате объединяются, в порядке обработки, чтобы сформировать результат элемента xsl: for-each-group. В конструкторе последовательности элемент контекста является начальным элементомВ соответствующей группе позиция контекста - это позиция этой группы в порядке обработки групп, а размер контекста - это число групп. Это приводит к тому, что в конструкторе последовательности вызов метода position () принимает последовательные значения 1, 2, ... last (). "

...