我创建了xquery函数,它返回一个表:
declare function local:table($collection as xs:string*, $interface as xs:string?, $date as xs:string?) as node() {
<table border="1">
<thead>
<tr>
<th>Inteface Name</th>
<th>Test Date</th>
<th>Test Result</th>
<th>Report Link</th>
</tr>
</thead>
<tbody>
{
for $child in xmldb:get-child-resources($collection)
let $doc := fn:doc(fn:concat($collection, '/', $child))
where (fn:ends-with($child, '.xml'))
and (($doc//*:interfaceName/text() eq $interface) or empty($interface))
and (($doc//*:reportDate/text() eq $date) or empty($date))
order by $doc//*:reportDate/text() descending
return
<tr>
<td>
{$doc//*:interfaceName/text()}
</td>
<td>
{$doc//*:reportDate/text()}
</td>
<td>
{$doc//*:testResult/text()}
</td>
<td>
<li>
<!--<a href="{document-uri(fn:doc(fn:concat($collection, '/', $child)))}">{$child}</a> -->
<a href="http://localhost:8080/exist/rest/db/junitReports/Report1.xml"> {$child}</a>
</li>
</td>
</tr>
}
</tbody>
</table>
我还在页面上添加了一些输入控件。其中一个看起来像:
<InterfaceName constraint="true" readonly="false" required="false" relevant="true">
<value>test</value>
</InterfaceName>
<xf:bind nodeset="InterfaceName">
<xf:bind nodeset="value" type="string"/>
<xf:input id="InterfaceName" ref="InterfaceName/value" incremental="true">
<xf:label></xf:label>
<xf:hint>xxxxxYYYZZZ</xf:hint>
<xf:help>Enter interface name</xf:help>
<xf:alert>Enter interface name</xf:alert>
</xf:input>
我还在网页上添加了一个按钮:
<trigger1 constraint="true" readonly="false" required="false" relevant="true">
<value></value>
</trigger1>
<xf:submission id="s-send"
replace="instance"
resource="echo:test"
method="get">
</xf:submission>
<div>
<xf:trigger id="trigger1" ref="trigger1/value" incremental="true">
<xf:label>Filter output</xf:label>
<xf:hint>a Hint for this control</xf:hint>
<xf:help>help for trigger1</xf:help>
<xf:send submission="s-send"/>
</xf:trigger>
</div>
在此按钮上单击我需要以某种方式将参数从那些输入控件传递到xquery函数并将表返回到网页。整个网页的类型为xQuery(它构建html)并使用eXist-db运行。 你能帮我解决这个问题吗?
谢谢。
答案 0 :(得分:1)
您需要四个元素才能实现目标:
<xf:instance id="result" >
用于存储调用xquery的结果。确保添加id属性以进一步标识实例。
<xf:submission>
调用xquery将结果存储在实例中。这是您在<xf:send>
中调用的提交内容,可能如下所示:
<xf:submission id="s-send" method="get" replace="instance" instance="result">
<xf:resource value="concat('myxquery.xq?interface=',InterfaceName/value)"/>
</xf:submission>
&#13;
请注意,concat函数用于构建xquery url,包括参数。
<xf:output value="instance('result')" mediatype="application/xhtml+xml">
。显示html表需要mediatype="application/xhtml+xml"
属性。在服务器端,你不能直接调用xquery函数,你需要编写一个调用函数的xquery(myquery.xq)并从URL中提取参数。
查看此示例https://en.wikibooks.org/wiki/XQuery/Getting_URL_Parameters