首页 > 解决方案 > xQuery:检查元素中的字符串,但忽略同一元素中但具有不同值的多个元素

问题描述

好的,所以我有这个包含两部电影的电影 xml 文件。我想获取所有包含“动作”字符串的电影。

<movie id="19995">
    <genre genre_id="28">Action</genre>
    <genre genre_id="12">Adventure</genre>
    <genre genre_id="14">Fantasy</genre>
    <vote_average>7.2</vote_average>
</movie>

<movie id="19995">
    <genre genre_id="14">Fantasy</genre>
    <genre genre_id="878">Science Fiction</genre>
    <vote_average>7.2</vote_average>
</movie>

这是我的代码自动取款机。

let $xml_file := doc("tmdb_5000_movies")
let $action_movies := $xml_file//movie[contains(genre/text(), 'Action')]

但我收到以下错误消息。

[XPTY0004] Item expected, sequence found: (text {"Action"}, text {"Adventure"}, ......

标签: stringxquerycontains

解决方案


contains()确实拿了一件东西;但由于 xml 中的每部电影都有两个或多个流派,contains遇到两个或三个项目的序列,导致错误消息。

试试这种方式:

let $action_movies := $xml_file//movie

return  $action_movies[genre[contains(text(),'Action')]]

推荐阅读