Как проверить, существует ли экземпляр в xforms?

#xpath #orbeon #xforms #xpath-2.0 #xsltforms

#xpath #orbeon #xforms #xpath-2.0 #xsltforms

Вопрос:

Я хочу отправить действие, только если экземпляр ‘AddressDetails’ существует (потому что экземпляр загружен в подчиненную форму).

Я попытался использовать атрибут ‘if’ xf: action следующим образом, но не сработал:

 <xf:action ev:event="save" if="instance('addressDetails') != ''">  

Я получил сообщение об ошибке «Ошибка при оценке экземпляра выражения XPath (‘AddressDetails’)».

Есть ли способ проверить, существует ли экземпляр?

Ответ №1:

С XPath 2.0 просто напишите:

 exists(instance('addressDetails'))
  

Или вы могли бы написать:

 count(instance('addressDetails')) > 0
  

Комментарии:

1. Нет. Ни exists, ни count не работали. Для exists он выдал ошибку, которая exists не определена, а для count не удалось вычислить выражение XPath.

2. На данный момент (временное решение) я создал другой экземпляр, который находится в основной форме (не подчиненной форме) и значение которого принимает логическое значение. При загрузке страницы значение false. После загрузки подчиненной формы я просто проверяю, является ли значение этого экземпляра «истинным».

3. count() должно работать даже с XPath 1.0. Возможно, ошибка для сообщения в XSLTForms (если я прав, что вы используете XSLTForms). Но хорошо знать, что у вас есть обходной путь.