Использование разных параметров в окне выбора с xquery - PullRequest
0 голосов
/ 16 ноября 2018

Я новичок в xQuery (с существованием базы данных), пытаюсь заполнить опции окна выбора значениями из 1 узла (Full) XML-файла и устанавливаю другой узел (corto) в качестве параметра, отправляемого для дальнейших запросов, к сожалению. безуспешно до сих пор ...

Структура источника XML для элемента управления select:

<?xml version="1.0" encoding="UTF-8"?>
<canales>
<Canal>
    <corto>24H</corto>
    <Full>24H</Full>
</Canal>
<Canal>
<corto>ALJZ</corto>
<Full>AL JAZEERA</Full>
</Canal>
....

Нет проблем при совместном использовании только одного параметра как для представления на экране, так и для передачи его другим функциям:

declare function app:Lista_canales($node as node()*, $model as map(*)){
let $nombre_canal := (doc(concat($config:data-root, '/','canales.xml')))
let $control :=
    <select name="n_canal" class="form-control">
        <option value ="">Select channel</option>
        {for $canall in $nombre_canal//corto
        return <option value="{$canall}">{$canall}</option>
        }

    </select>
return
    templates:form-control($control, $model)

};

Снимок показывает значения окна выбора и таблицу, показывающую последующий запрос, выполненный с тегом DISN

Проблемы появляются, если я пытаюсь использовать (более значимое) полное имя для списка выбора, оставляя другое для передачи его другим запросам. Этот код не делает то, что я хочу:

declare function app:Lista_canales($node as node()*, $model as map(*)){
let $nombre_canal := (doc(concat($config:data-root, '/','canales.xml')))
let $control :=
    <select name="n_canal" class="form-control">
        <option value ="">Select channel</option>
        {for $canall in $nombre_canal
        return <option value="{$canall//corto}">{$canall//Full}</option>
        }
    </select>
return
    templates:form-control($control, $model)

};

Любые советы / советы будут приветствоваться.

1 Ответ

0 голосов
/ 16 ноября 2018

Ваша проблема возникает из-за изменения, которое вы сделали в выражении FLWOR вашего второго примера - в предложение for.

В первом примере вы итерировали по $nombre_canal//corto - это означает, что вы вернете один элемент <option> для каждого элемента <corto> в источнике.

Во втором примере вы переключились на итерацию всего за $nombre_canal - это означает, что вы действительно не выполняете итерацию вообще, поскольку $nombre_canal является полным canales.xml документом.

Чтобы исправить 2-й пример, необходимо восстановить предложение for из 1-го образца.Вот минимальный пример, демонстрирующий подход:

xquery version "3.1";

let $nombre_canal := 
    <canales>
        <Canal>
            <corto>24H</corto>
            <Full>24H</Full>
        </Canal>
        <Canal>
            <corto>ALJZ</corto>
            <Full>AL JAZEERA</Full>
        </Canal>
    </canales>
for $canall in $nombre_canal/Canal
return 
    <option value="{$canall/corto}">{$canall/Full/string()}</option>

Возвращает два <option> элемента (по одному на <Canal> из источника):

<option value="24H">24H</option>
<option value="ALJZ">AL JAZEERA</option>
...