2016-12-24 10 views
2

私はXQuery 3.0を初めて使用しており、プロジェクトを作成しようとしています。XQuery HTML配列の入力

song[]入力要素を含む投稿要求を送信しています。

私はrequest:get-parameter('song[]', '')を使用しようとすると、しかし、それは以下のように私に結果を与える:

Value 1 Value 2 Value 3 

誰もが個別にこれらの変数を取得する方法を知っていますか?

編集:eXistにPOSTされているリクエストパラメータの実際の内容が提供されます。

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> 
+0

POSTされているリクエストパラメータの実際の内容をeXistに提供できますか? – joewiz

+0

@joewiz私は自分の質問を編集しました。 – yenerunver

答えて

3

あなたの曲はすべて3つの弦のシーケンスとしてそこにあります。 $result変数は、request:get-parameter()関数によって返される3つの文字列のシーケンスです。

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

それとも単純な用途のための

(仮定のXQuery 3.0:出力するには

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

はそれらをすべて、あなたがFLWOR式、例えばを使用することができます。それらを個別にアクセスするには、例えば、位置述語を使用することができますシンプルなマップのオペレータは、例えば、)提供されています:

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

または、例えばで区切られた文字列、たとえば、セミコロン、などの値を返す:

string-join($result, "; ") 

空白で区切られた1つの文字列(Song 1 Song 2 Song 3)として表示される理由は、シーケンス内の3つのアイテムが正規化され、デフォルトのアイテムセパレータは単一のスペースです。シーケンス正規化と項目セパレータの詳細については、https://www.w3.org/TR/xslt-xquery-serialization-31/#serdmを参照してください。

+0

joewizさんがもう一度その日を保存しました:) – yenerunver