使用 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 中不可行吗?