XForms, внешнее соединение XSLTForms

У меня есть опрос XForm. Я хотел бы сохранить вопросы в отдельном экземпляре xf: той же модели из экземпляра xf:, который собирает ответы. В одном случае группа, содержащая 10 вопросов. Во втором случае группа для хранения 10 ответов. Будет представлен второй экземпляр. Итак, это похоже на объединение двух списков.

Я пробовал использовать следующую логику:

<xf:output ref="instance('questions')/question[position()]/@text"></xf:output>

но эта позиция () всегда возвращает 1, потому что контекст вопросов xf: instance. Использование index('current-repeater') обновляет все 10 отображаемых вопросов, чтобы они были вопросом в индексе самой последней итерации повторения.

Есть ли способ использовать временную переменную в xpath для этого? Я пробовал различные варианты использования $variables и даже:

<xf:output ref="instance('questions')/question[position() = (count(current()/preceding-sibling::*) + 1)]/@text"></xf:output>

Спасибо,

Джейсон


person Jason Kleban    schedule 04.12.2009    source источник


Ответы (2)


Разве это не решение:

<xf:output value="instance('questions')/question[current()/position()]/@text"></xf:output>

Функция current() возвращает узел контекста, см. http://www.w3.org/TR/xforms11/#fn-current.

person Tambet    schedule 10.12.2009

Что ж, оказывается, это в настоящее время не поддерживается:

Такие оси, как «предшествующий родственный элемент::», еще не поддерживаются анализатором XPath XSLTForms, написанным с помощью XSLT 1.0.

Вместо этого сделайте что-нибудь в этом роде:

<xf:instance id="positions">
  <data xmlns="">
    <position />
  </data
</xf:instance>

...

<xf:setvalue ref="instance('positions')/position">1</xf:setvalue>
<xf:setvalue ref="instance('positions')/position" value="count(instance('main')/path/to/things/thing)-1" />
etc.

Затем, чтобы использовать их:

<xf:input ref="path/to/things/thing[instance('positions')/position]"> ...

От [email protected]

person Jason Kleban    schedule 08.12.2009