0

バックグラウンド:

送信されたフォームを (XSLTForms を使用して) 作成すると、ユーザーは後日再送信できます。ユーザーがフォーム入力の横に以前の送信の値を表示できるようにするため、「data-set」と「old-data-set」の 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()メソッドはラベルで機能しますが、2 番目のインスタンスから値を取得しようとすると常に「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> 

'old-data-set' インスタンスから正しい値を取得するために使用できるように、繰り返しの position() を呼び出すにはどうすればよいですか?

4

1 に答える 1

0

これが発生する理由は、述語内 ( 内では[]、コンテキストが異なり、反復内の現在のノードではなくposition()古いデータセット ノードの位置を参照するためです。referencereference

私は 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 に答える