1

私は次のxml構造を持っています:

<reviews>
<review>
    <review_no>R1</review_no>
    <movie_title>After.Life</movie_title>
    <rating>3</rating>
    <reviewer>John Frankenheimer</reviewer>
    <review_date>2012-11-07</review_date>
    <review_desc>Average</review_desc>
</review>
    ...
</reviews>

および次の XQuery :

<query2>
{
for $r in distinct-values(doc("reviews.xml")/reviews/review/reviewer)

return
    <output><reviewer> {data(parent::node()/movie_title)} </reviewer>
    </output>
}
</query2>

私が得る出力は一連の

<output><reviewer/></output>

タグ内<query2>。代わりに、レビュアー タグに movie_title データを含める必要があります。

なんで ?

4

3 に答える 3

1

クエリの問題は、FLWOR 式がコンテキスト アイテムを設定しないことです。そのため、parent::node() の代わりに、$r/parent-node() が必要です。

これは、XSLT に慣れていると非常に犯しやすい間違いであり、私はいつもそうしています。

于 2012-11-18T08:29:24.177 に答える
1

distinct-valuesノードではなく値のみを返すため、parent::node()機能しません。

期待される出力は何ですか? あなたは本当の問題を特定しませんでした。レビュアーごとにグループ化されたすべての movie_titles を見つけたいと思います。もしそうなら、group byあなたにとって非常に役に立ちます:

<query2>
  <output>
    {
      for $review in doc("reviews.xml")/reviews/review
      let $reviewer := $review/reviewer
      group by $reviewer
      return <reviewer>{$review/movie_title}</reviewer>
    }
  </output>
</query2>

タグが不要な場合は、ラップアラウンド<movie_title/>できます。data()$review/movie_title

于 2012-11-17T20:40:22.603 に答える
1

XQuery プロセッサが をサポートしていない場合group byは、(暗黙的な) 結合を実行する必要があります。クエリと非常に似ていますが、すべてのレビュアーを取得し、それぞれについて、述語を使用してレビュアーにクエリを実行します。

<query2>
  <output>
    {
      for $reviewer in distinct-values(doc("reviews.xml")/reviews/review/reviewer)
      return <reviewer>
               {
                 /reviews/review[reviewer = $reviewer]/movie_title
               }
             </reviewer>
    }
  </output>
</query2>
于 2012-11-17T21:43:53.170 に答える