我是xQuery的新手(使用现有数据库),尝试用来自xml文件的一个节点(完整)的值填充选择框选项,并设置另一个节点(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)};
快照显示选择框的值和显示使用DISN标记完成的后续查询的表。
如果我试图为select列表使用(更有意义的)全名,同时将另一个全名传递给其他查询,则会出现问题。此代码不符合我的要求:
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)};
欢迎任何建议/暗示。
发布于 2018-11-16 19:26:31
您的问题来自于您在第二个示例的FLWOR表达式中对for子句所做的更改。
在第一个示例中,您在$nombre_canal//corto上迭代--这意味着您将为源中的每个<corto>元素返回一个<option>元素。
在第二个示例中,您切换到只迭代$nombre_canal --这意味着根本不进行迭代,因为$nombre_canal是完整的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>从源返回一个):
<option value="24H">24H</option>
<option value="ALJZ">AL JAZEERA</option>https://stackoverflow.com/questions/53340933
复制相似问题