XForms, внешнее соединение XSLTForms - PullRequest
0 голосов
/ 04 декабря 2009

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

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

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

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

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

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

Спасибо

Jason

Ответы [ 2 ]

1 голос
/ 11 декабря 2009

Это тоже не решение:

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

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

0 голосов
/ 08 декабря 2009

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

Оси, такие как «previous-sibling ::», еще не поддерживаются анализатором 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]"> ...

От xsltforms-support@lists.sourceforge.net

...