let $id := request:get-parameter("id","") 什么可能导致 $id 无法从 get-parameter 获取值?我该如何解决它?

问题描述 投票:0回答:1

我正在完成一项基本练习,您可以在这里找到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)

server directory exist-db getparameter xquery-3.1
1个回答
0
投票

如前所述,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()

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.