0

背景:

构建提交的表单(使用 XSLTForms),然后用户可以在以后重新提交。我们希望用户在表单输入旁边看到他们之前提交的值,所以我们加载了 2 个实例“数据集”和“旧数据集”。这在大多数情况下都有效,但不是我们有重复的地方。无论出于何种原因,当从“旧数据集”实例调用数据时,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> 

如何调用重复的 position() 以便我可以使用它从“旧数据集”实例中获取正确的值?

4

1 回答 1

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>
于 2013-01-22T12:20:18.047 回答