Проблема при сравнении значений в разделе повторения в формах Orbeon

Я работаю над формами Orbeon, и у меня есть проблема, связанная с функциональностью, как описано ниже. У меня есть форма с повторяющимися полями, как показано ниже, которые должны быть добавлены динамически, нажав кнопку «Добавить». У меня есть два поля в разделе повторения. А также у меня есть условие, что поля должны сравниваться с полем в той же строке, а также с тем, которое находится в предыдущей, а также в следующей строке.

У меня есть такой экземпляр:

 1.constraint="if(.!='')
         then
       (. < ../two and . > ../preceding::number/two)
       else
       true()"/>
 2.constraint="if(.!='' )
    then 
    (. > ../one  and . < ../following-sibling::number/one)
    else
    true()"/>


 <number> is under repeat condition. 
 1.In this,i am trying to compare number/one with <two> in the same row and the     preceding row.
 2.In this,i am trying to compare number/two with <one> in the same row and the     next preceding row.

 I have to add like 10 times of these fields.When it is added after 3rd time,the logic doesn't work properly.

 Kindly let me know what happens in this case.

person LavanyaG    schedule 09.10.2013    source источник


Ответы (1)


Неквалифицированные выражения xpath для предшествующего и последующего братьев и сестер возвращают последовательность всех предшествующих или следующих братьев и сестер.

Вам нужно добавить предикат для выбора предыдущего или следующего родственного элемента.

Итак, для вашего примера:

../preceding-sibling::number[1]/two

или. более полно

../preceding-sibling::number[position()=1]/two

вернет предыдущий родственный элемент "два".

Пример целочисленного сравнения:

(. > xs:integer(../preceding-sibling::number[1]/two))

См. http://blog.orbeon.com/2007/06/xpath-reverse-axis-evil-at-times_04.html, чтобы узнать больше.

С Уважением

Джез

person Jez    schedule 09.10.2013
comment
Спасибо за ваш ответ. - person LavanyaG; 09.10.2013
comment
Не могли бы вы быть более конкретным? - person Jez; 09.10.2013
comment
Когда я добавляю примерно 10 раз в раздел, у меня возникают проблемы только во 2-й, 4-й, 7-й и 10-й строках. Ограничения не отображаются во 2-й строке, 4-й строке, 7-й строке и 10-й строке. В других строках код работает нормально. Можете ли вы объяснить, почему это происходит? - person LavanyaG; 10.10.2013
comment
Похоже, вы могли сравнивать строки: т.е. ('9' › '8')=ИСТИНА, ('10' › '9')=ЛОЖЬ. См. отредактированный ответ выше. - person Jez; 10.10.2013
comment
Большое спасибо за четкое объяснение. Код работает нормально. - person LavanyaG; 10.10.2013