1

XqillaでXqueryを使い始めたところです。

結果を正しいインデントと改行で返す必要があります。

$ duplicatesという監督のリストがあり、returnステートメント内でこれらの監督からすべての映画のタイトルを取得したいと思います。

私のreturnステートメント:

for $duplicate in $duplicates
return 
    <movie director="{$duplicate}"> 
    {$result/videos/video/title[../director=$duplicate]}</movie>

このように(種類の)フォーマットしたいもの:

<movie director="Coppola">
    <title>The Godfather</title>
    <title>The Godfather pt. 2</title>
    <title>Apocalypse Now</title></movie>

子供たちが適切にインデントされ、それぞれが新しい行に表示されます。

私が得ているのはこれです:

<movie director="Coppola">
     <title>The Godfather</title><title>The Godfather pt. 2</title><title>Apocalypse Now</title></movie>

すべてのタイトルが1行に表示されます。

以前は変数を返すだけでタイトルのリストを正常に返したので、ウィキブックスで提案されているように、forループを使用してネストされたreturnステートメントを試しました。このソリューションには、明示的に定義されたタグも含まれて<title>いました。

私はここSOで同じ問題を抱えている人を1人見つけました。

そこでの答えはうまくいきませんでした。名前空間を追加すると、プログラムは完全に出力を停止しました。恨みのない解決策があれば、私もそれを好みます(誰もが最初から完璧な出力を得ているように見えるので、それはあるようです)。

問題は、XMLとXqueryを中括弧の使用法と混合することに関するもののようです。

4

1 に答える 1

2

これは、出力のシリアル化を制御するために設定されたフラグとオプションの問題であるのと同様に、クエリの問題ではありません。

おそらく必要なのは、XQillaformat-pretty-printフラグをtrueに設定するか、(XQuery 3.0の場合)プロローグでXQueryシリアル化オプションを次のように使用することです。indent

declare option output:indent "yes";

これがコマンドラインで使用され、XQuery 3.0のサポートがまだ利用できない場合は、別のきれいな印刷ツールを使用してパントすることもできます(XQillaでシリアル化オプションを設定する明確な方法がない場合)。たとえば、出力をにパイプするxmlstarlet foと、2回目のパスできれいに印刷されます。

于 2012-04-11T21:36:26.453 に答える