背景:
构建一个提交的表单(使用XSLTForms),然后用户可以在以后重新提交。我们希望用户在表单输入旁边看到他们之前提交的值,因此我们正在加载2个实例的“数据集”和“旧数据集”。这在大多数情况下都有效,但不是我们重复的地方。无论出于何种原因,当从'old-data-set'实例调用数据时,position()方法总是返回'1'。例如:
<xf:repeat nodeset="instance('data-set')/references/reference">
<xf:group ref=".">
<xf:label>Reference <xf:output value="position()"/></xf:label>
<xf:input ref="/org_name">...</xf:input>
<xf:output ref="instance('old-data-set')/references/reference[position()]/org_name"/>
</xf:group>
</xf:repeat>
position()
方法在标签中起作用,但在尝试从第二个实例获取值时始终返回“1”。例如,以上产生:
<label>Reference 1</label>
<input>Org name 1</input>
<output>Old org name 1</output>
<label>Reference 2</label>
<input>Org name 2</input>
<output>Old org name 1</output>
<label>Reference 3</label>
<input>Org name 3</input>
<output>Old org name 1</output>
如何调用repeat的position(),以便我可以使用它从'old-data-set'实例中获取正确的值?
答案 0 :(得分:0)
发生这种情况的原因是在谓词内部([]
内部,上下文不同而position()
指的是旧数据集reference
节点的位置比迭代中的当前reference
节点。
我不熟悉XSLTForms,但这是怎么回事?
<xf:repeat nodeset="instance('data-set')/references/reference">
<xf:group ref=".">
<xf:label>Reference <xf:output value="position()"/></xf:label>
<xf:input ref="/org_name">...</xf:input>
<xf:output
ref="instance('old-data-set')/references/reference[count(current()/preceding-sibling::reference) + 1]/org_name"/>
</xf:group>
</xf:repeat>