在xquery

时间:2018-11-16 15:33:13

标签: html xquery

我是xQuery的新手(使用existdb),尝试用xml文件的1个节点(完整)的值填充选择框选项,并将另一个节点(corto)设置为发送用于进一步查询的参数,很不幸直到现在仍未成功...

select控件的xml源代码的结构为:

<?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)

};

Snapshot shows the values of select box and the table showing the subsequent query done with the DISN tag

如果我尝试对选择列表使用(更有意义的)全名,同时保留另一个将其传递给其他查询,则会出现问题。这段代码不能满足我的要求:

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 :(得分:0)

您的问题来自您在第二个样本的FLWOR表达式中所做的更改-对for子句的更改。

在第一个示例中,您遍历了$nombre_canal//corto -这意味着您将为源中的每个<option>元素返回一个<corto>元素。

在第二个示例中,您切换为仅对$nombre_canal进行迭代-这意味着您根本没有真正对 进行迭代,因为$nombre_canal是完整的{{1} }文件。

要修复第二个示例,应从第一个示例中恢复canales.xml子句。这是一个演示此方法的最小示例:

for

这将返回两个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>