2

我是 XQuery 3.0 的新手,正在尝试编写一个项目。

我正在发送一个包含song[]输入元素的发布请求。

但是,当我尝试使用时request:get-parameter('song[]', ''),它给我的结果如下:

Value 1 Value 2 Value 3

任何人都知道如何分别获取这些变量?

编辑:提供了发布到 eXist 的请求参数的实际内容。

HTML 表单:

<form action="post.xq" method="POST">
    <input name="song[]" type="text" value="Song 1" />
    <input name="song[]" type="text" value="Song 2" />
    <input name="song[]" type="text" value="Song 3" />
</form>

post.xq:

let $result := request:get-parameter('song[]', '')
return
    <result>
        {$result}
    </result>

结果:

<result>Song 1 Song 2 Song 3</result>
4

1 回答 1

3

你的歌曲都在那里,作为一个 3 弦的序列。该$result变量是request:get-parameter()函数返回的 3 个字符串的序列。要单独访问它们,您可以使用位置谓词,例如:

<result>{$result[1]}</result>

要将它们全部输出,您可以使用 FLWOR 表达式,例如:

for $song at $n in $result
return
    <song n="{$n}">{$song}</song>

或者对于更简单的用途(假设 XQuery 3.0 可用),简单的 map 运算符,例如:

$result ! <song>{.}</song>

或者将值作为字符串返回,用分号分隔,例如:

string-join($result, "; ")

您将它们视为单个以空格分隔的字符串 ( Song 1 Song 2 Song 3) 的原因是序列中的 3 个项目正在被规范化,并且默认项目分隔符是单个空格。有关序列规范化和项目分隔符的更多信息,请参阅https://www.w3.org/TR/xslt-xquery-serialization-31/#serdm

于 2016-12-25T16:57:26.770 回答