我是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)
};
如果我尝试对选择列表使用(更有意义的)全名,同时保留另一个将其传递给其他查询,则会出现问题。这段代码不能满足我的要求:
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)
};
任何建议/提示都将受到欢迎。
答案 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>