Используя 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 parent:: */@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?