XSLTForms, использующие position() для выбора повторяющегося элемента из другого экземпляра

Фон:

Создание формы (с использованием 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() повторения, чтобы я мог использовать его для получения правильного значения из экземпляра «старого набора данных»?


person chrism    schedule 22.01.2013    source источник


Ответы (1)


Причина, по которой это происходит, заключается в том, что внутри предиката (внутри [] контекст другой, и 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>
person JLRishe    schedule 22.01.2013
comment
Я думал, что это будет что-то в этом духе. Я подозреваю, что это не поддерживается xsltforms, это выдает ошибку инициализации. - person chrism; 22.01.2013
comment
Это должно поддерживаться XSLTForms, поэтому я хотел бы иметь полный тестовый пример, чтобы проверить это. - person Alain Couthures; 22.01.2013