首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用xquery在选择框中使用不同的参数

使用xquery在选择框中使用不同的参数
EN

Stack Overflow用户
提问于 2018-11-16 15:33:12
回答 1查看 46关注 0票数 2

我是xQuery的新手(使用现有数据库),尝试用来自xml文件的一个节点(完整)的值填充选择框选项,并设置另一个节点(corto)作为发送给进一步查询的参数,不幸的是,到目前为止没有成功.

select控件的xml源的结构是:

代码语言:javascript
复制
<?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>
....

如果只为屏幕上的演示文稿共享一个参数并将其传递给其他函数,则没有问题:

代码语言:javascript
复制
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标记完成的后续查询的表。

如果我试图为select列表使用(更有意义的)全名,同时将另一个全名传递给其他查询,则会出现问题。此代码不符合我的要求:

代码语言:javascript
复制
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)

};

欢迎任何建议/暗示。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-16 19:26:31

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

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

在第二个示例中,您切换到只迭代$nombre_canal --这意味着根本不进行迭代,因为$nombre_canal是完整的canales.xml文档。

要修复第二个示例,您应该从第一个示例恢复for子句。下面是一个演示该方法的最小示例:

代码语言:javascript
复制
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>从源返回一个):

代码语言:javascript
复制
<option value="24H">24H</option>
<option value="ALJZ">AL JAZEERA</option>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53340933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档