XSLTForms使用position()从另一个实例中选择repeat元素

时间:2013-01-22 11:52:49

标签: xpath xforms xsltforms

背景:

构建一个提交的表单(使用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'实例中获取正确的值?

1 个答案:

答案 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>