Работа с саксоном: оценить исключение

У меня есть файл XBL, где я могу передать некоторые аргументы из моей формы, скажем:

<my-xbl arg1='' arg2=''>
</my-xbl>

<xf:input ref='@arg1'/>
<xf:input ref='@arg2'/>

Тогда у меня есть что-то вроде этого:

<xf:model>
    <xf:action id="populate-data-binding">                         
        <xf:action context="instance('sub')"
                   ev:event="xforms-submit-done"
                   ev:observer="my-submission">                     
            <xf:action>        
                <xf:var as="xs:string" name="control-value" value="saxon:evaluate(instance('arg1'))"/>  
                <xf:var as="xs:string" name="control-name"  value="saxon:evaluate(instance('arg2'))"/>
                <xf:setvalue ref="xxf:instance('fr-form-instance')//*[name() = $control-name]"
                             value="$control-value"/>
           </xf:action>
    </xf:action>
</xf:model>

Проблема в том, когда arg1 пустая строка (это означает, что в моей форме, когда я нажимаю Control settings и Skipp arg1 поле, просто оставив его пустым), то моя форма падает. Когда я вставляю '' или что-нибудь, кроме пустой строки (asd, q, что-нибудь) как arg1 все отлично. Так что теперь я хотел бы сделать что-то вроде

<xf:var as="xs:string" name=".." value="if(@arg1 ='null') then 'asd'
 else 'saxon:evaluate(instance('arg1'))'/>

Это не работает, очевидно, потому что вопрос кавычек (условие должно быть между '' и я не могу поместить внутри себя какие-либо цитаты) и, возможно, что-то еще. Может ли кто-нибудь помочь мне исправить это? Заранее спасибо.

ОБНОВИТЬ:

Я думаю, я был немного неточным. Чтобы прояснить ситуацию, arg1 это идентификатор xf:input в моей форме. Когда форма загружается, я вызываю службу REST (вы уже помогли мне в этом, поведение Event xforms-model-construct-done), и она возвращает мне некоторые данные. Теперь я хотел бы заполнить данные для моих входных данных xf: и приведенный выше код делает это очень хорошо. Проблема в том, что в моем XBL у меня много параметров, а не только arg1, arg2это больше похоже на

<my-xbl arg1 = '' arg2 = '' ... arg19 = '' arg20 = ''/>

Теперь, когда в моей форме я иду к основным настройкам элемента управления, я должен заполнить все параметры arg1...20, Я хотел бы заполнить только те, которые мне нужны, обычно 3 или 4, а остальные оставить пустыми. Проблема в том, что я не могу этого сделать, потому что таким образом моя форма падает, и это потому, что saxon:evalute выдает исключение, если его аргумент равен нулю.

(Также упомянуть все, но я не думаю, что это уместно здесь, но это может помочь вам понять мой код выше: на самом деле, arg2 это идентификатор xf:input но arg1 это что-то вроде пути к ресурсу в веб-сервисе, например, у меня есть arg2 = "'firstname'" который относится к моему xf:input и arg1 =" //CUSTOMER/FIRSTNAME" (без кавычек) и мой URL-адрес службы REST http://www.thomas-bayer.com/sqlrest/CUSTOMER/2/, Таким образом, я могу выбрать это под XF: ввод идентификатора 'firstname' Я хочу вставить только имя из всех данных, которые я получил от веб-сервиса. Опять же, arg4 будет как 'lastname' и arg3 будет //CUSTOMER/LASTNAME и так далее. Как я уже сказал, не думаю, что это актуально здесь)

Вот почему я хотел проверить пустое значение, и я думаю, что ваш код должен был помочь мне - к сожалению, он не работает. Моя форма больше не падает, но и данные не попадают в xf:inputs, Может потому что это недоразумение? Благодарю.

1 ответ

<xf:var
    as="xs:string"
    name="..."
    value="
        if(@arg1 ='null')
        then 'asd'
        else 'saxon:evaluate(instance(''arg1''))"/>

Чтобы проверить пустую строку, лучше использовать normalize-space(), Кроме того, я думаю, что instance('arg1') где значение хранится в обоих случаях:

<xf:var
    as="xs:string"
    name="..."
    value="
        if (normalize-space(instance('arg1')) = '')
        then 'asd'
        else 'saxon:evaluate(instance(''arg1''))'
"/>

Но мне немного непонятно, почему нужно цитировать saxon:evaluate() вызов. Вы хотите, чтобы переменная содержала:

  1. результат оценки?
  2. или выражение XPath?
Другие вопросы по тегам