我想把所有的电影按类型分类,然后列出这个类型中的所有电影标题。
我的XML电影数据库如下所示:
<movies>
<movie>
<title>A History of Violence</title>
<year>2005</year>
<country>USA</country>
<genre>Crime</genre>
<summary>Tom Stall, a humble family man and owner of a
popular neighborhood restaurant, lives a quiet but
fulfilling existence in the Midwest. One night Tom
foils a crime at his place of business and, to his
chagrin, is plastered all over the news for his
heroics. Following this, mysterious people follow
the Stalls' every move, concerning Tom more than
anyone else. As this situation is confronted, more
lurks out over where all these occurrences have
stemmed from compromising his marriage, family
relationship and the main characters' former
relations in the process.</summary>
<director>
<last_name>Cronenberg</last_name>
<first_name>David</first_name>
<birth_date>1943</birth_date>
</director>
<actor>
<first_name>Vigo</first_name>
<last_name>Mortensen</last_name>
<birth_date>1958</birth_date>
<role>Tom Stall</role>
</actor>
<actor>
<first_name>Maria</first_name>
<last_name>Bello</last_name>
<birth_date>1967</birth_date>
<role>Eddie Stall</role>
</actor>
<actor>
<first_name>Ed</first_name>
<last_name>Harris</last_name>
<birth_date>1950</birth_date>
<role>Carl Fogarty</role>
</actor>
<actor>
<first_name>William</first_name>
<last_name>Hurt</last_name>
<birth_date>1950</birth_date>
<role>Richie Cusack</role>
</actor>
</movie>以下是我的表达:
xquery version "3.0";
let $movie := collection ('/db/Movie/data')/movies/movie
return
<html>
<head>
</head>
<body>
<h1>Movies grouped by genre:</h1>
<ol>{
for $m in $movie
let $g := $m/genre
let $t := distinct-values($m/title/text())
group by $g
return
<li>{$g} <p> <ol>Title: {$t}</ol> </p></li>
}</ol>
</body>
</html> 但结果将给我所有的标题在一排,但我希望他们也als列表点分开。
这是实际输出:
<li>
<genre>Crime</genre>
<p>
<ol>Title: A History of Violence Heat Match Point</ol>
</p>
</li>
<li>应该是这样的:
<li>
<genre>Crime</genre>
<p>
<ol>Title: A History of Violence
Heat
Match Point
</ol>
</p>
</li>
<li>如何调整查询?
提前谢谢。问候
发布于 2014-01-11 18:48:27
只需在里面再加一个循环。我确实重新格式化并重命名了一些变量,以使其更具描述性。通常,如果确实有充分的理由,就不要使用text(),大多数情况下最好使用data()来聚合元素中的所有文本节点。
xquery version "3.0";
let $movies := collection ('/db/Movie/data')/movies/movie
return
<html>
<head></head>
<body>
<h1>Movies grouped by genre:</h1>
<ol>{
for $movie in $movies
let $genre := $movie/genre
group by $genre
let $titles := distinct-values($movie/title/data())
return
<li>
<h2>{$genre} Titles</h2>
<ol>{
for $title in $titles
return <li>{$title}</li>
}</ol>
</li>
}</ol>
</body>
</html> 您可以使用一个使用元素构造函数作为轴步骤的隐式循环,但是这需要删除distinct-values调用(您真的需要吗?)我刚刚重复了$movie循环:
for $movie in $movies
let $genre := $movie/genre
group by $genre
return
<li>
<h2>{$genre} Titles</h2>
<ol>{ $movie/title/element li { data() } }</ol>
</li>顺便说一句,HTML不允许段落中的列表。它是格式良好的XML,但不是有效的HTML。我也修好了。
https://stackoverflow.com/questions/21064189
复制相似问题