当我尝试在xml文件上执行我的Xquery代码时,我在其中一个字段中获得了多个结果。
这是我的xml文件
<Actors>
<Actor name="NTR">
<Movie TITLE="Yamadonga" Director="Rajamouli"></Movie>
<Movie TITLE="AADI" Director="VV vinayak">
</Movie>
</Actor>
<Actor name="Rajeev">
<Movie TITLE="Yamadonga" Director="Rajamouli" ></Movie>
</Actor>
<Actor name="mahesh">
<Movie TITLE="pokiri" Director="puri">
</Movie>
</Actor>
我的xquery文件
<Director>
{
for $Movie in doc("actors.xml")/Actors/Actor/Movie
return
if($Movie/@TITLE=$title)
then
data($Movie/@Director)
else()
}
</Director>
最重要的是,我的结果
<movies>
<movie>
<Title>Yamadonga</Title>
<Actor>NTR</Actor>
<Actor>Rajeev</Actor>
<Director>Rajamouli Rajamouli</Director>
</movie>
</movies>
如何在导演栏中只获得一个值?
我的程序: - 我运行了不同的值函数(../Movie/@TITLE),这给了我显示标题的答案。但由于标题和导演是电影的属性,我无法使用另一个访问。当我迭代演员时,因为有两个演员有一个导演单个电影,导演名称被打印两次。当我迭代电影时,我不能在它上面使用distinct-values,因为它不是一个属性。
答案 0 :(得分:1)
您的XQuery实际上效率不高或易读。你可以做一个简单的xpath:
<Director>
{
data((doc("actors.xml")/Actors/Actor/Movie[@TITLE = $title])[1]/@Director)
}
</Director>
答案 1 :(得分:0)
这是因为for
正在返回2部电影。为什么不使用带有distinct-values()
的XPath?
<Director>
{
distinct-values(doc("actors.xml")/Actors/Actor/Movie[@TITLE=$title]/data(@Director))
}
</Director>