我正在完成一项基本练习,您可以在这里找到https://exist-db.org/exist/apps/doc/beginners-guide-to-xrx-v4)。
问题:我认为问题出在
get-parameter()
函数上。
返回:
http://localhost:8080/exist/apps/terms/views/view-item.xq?id=%20%20%20%20 1
最后的这个值 1 似乎没有被 $id 获取,因为它没有给我这些术语的数据。
这是xml文件:
<term>
<id> 1 </id>
<term-name> Declarative Programming </term-name>
<definition> A style of programming that allows users to declare their
requirements (what they want done) and leave out the details of
how the function should be performed. </definition>
<publish-status-code> published </publish-status-code>
</term>
这是我正在运行的 xquery: 查看项目.xq
xquery version "3.1";
declare namespace request="http://exist-db.org/xquery/request";
declare option exist:serialize "method=xhtml media-type=text/html indent=yes";
let $id := request:get-parameter("id","")
let $term := collection('/db/apps/terms/data')/term\[id=$id\]
(: let $term := collection('/db/apps/terms/data')/term\[id = $id\]:)
(: :let $term := collection('/db/apps/terms/data')/term\[id=1\]:)
return
<html>
<head>
<title>Term {$term/id/text()}</title>
</head>
<body>
<h1>Term {$term/id/text()}</h1>
<b>Term ID: </b> {$term/id/text()}</br>
<b>Term Name: </b> {$term/term-name/text()}</br>
<b>Term Definition: </b> {$term/definition/text()}</br>
<b>Term Status: </b> {$term/publish-status-code/text()}</br>
</body>
</html>
[当前输出,未返回 id 1 的数据](https://i.sstatic.net/7ofAN6ne.png)
如前所述,URL 参数中的“1”之前有很多空格(
%20
)。
trim
函数是 functx
库的一部分,默认安装或作为包提供。您可以通过以下方式import
:
xquery version "3.1";
declare namespace request="http://exist-db.org/xquery/request";
import module namespace functx="http://www.functx.com";
let $id := request:get-parameter("id","") => functx:trim()
...
如果您的索引假设
@id
是整数,请将其通过管道传输到 xs:integer
,如下所示:
let $id := request:get-parameter("id","") => functx:trim() => xs:integer()
希望这有帮助。