Использование XSLT 1.0 Мне нужно преобразовать это:XSLT 1.0 группировка с помощью клавиш на основе атрибута в родительских
<form>
<question NumOfColumns="3">
<title>Colors</title>
<answer>red</answer>
<answer>orange</answer>
<answer>yellow</answer>
<answer>green</answer>
<answer>blue</answer>
<answer>indigo</answer>
<answer>violet</answer>
</question>
</form>
в этом:
<h2 class="question">Colors</h2>
<div class="answersrow">
<input type="checkbox" name="colors" value="red" id="red" /> <label for="red">red</label>
<input type="checkbox" name="colors" value="orange" id="orange" /> <label for="orange">orange</label>
<input type="checkbox" name="colors" value="yellow" id="yellow" /> <label for="yellow">yellow</label>
</div>
<div class="answersrow">
<input type="checkbox" name="colors" value="green" id="green" /> <label for="green">green</label>
<input type="checkbox" name="colors" value="blue" id="blue" /> <label for="blue">blue</label>
<input type="checkbox" name="colors" value="indigo" id="indigo" /> <label for="indigo">indigo</label>
</div>
<div class="answersrow">
<input type="checkbox" name="colors" value="green" id="green" /> <label for="green">green</label>
</div>
NumOfColumns в узле вопроса говорит, сколько столбцов использовать при выводе ответных div. Для каждого узла, я могу получить свою строку с помощью:
потолок (положение() DIV родитель :: */@ NumOfColumns)
Это работает нормально; Я могу вывести правильное целое число. Но я не могу заставить клавиши/группировку работать, и я не уверен, где проблема.
Я думал, что ключ будет:
<xsl:key name="answersrow" match="form/question/answer[ceiling(position() div parent::*/@NumOfColumns) = parent::*/@NumOfColumns]" use="." />
и тогда я мог бы получить узлы с:
<xsl:for-each select="key('answersrow', answer)">
Нет везения. У кого-нибудь есть решение? Или это не выполнимо в XSLT 1.0?
Большое спасибо за ответы. Я должен был добавить в своем оригинале, что эта часть уже была внутри шаблона, поэтому мне пришлось сделать эту часть внутри именованного шаблона. @Dimitre, спасибо также за включение подхода XSLT 2.0. – devjeff