0

当我尝试在 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>

如何在director字段中只获取一个值?

我的程序:- 我在 (../Movie/@TITLE) 上运行了不同的值函数,这给了我显示标题的答案。但是由于标题和导演是电影的属性,我无法使用另一个访问一个。当我迭代演员时,由于有两个演员为一部电影指定一个导演,导演的名字会被打印两次。当我遍历电影时,我不能在它上面使用不同的值,因为它不是一个属性。

4

2 回答 2

1

您的 XQuery 确实不是很高效或易于阅读。你可以做一个简单的xpath:

<Director>
{
data((doc("actors.xml")/Actors/Actor/Movie[@TITLE = $title])[1]/@Director)
}
</Director>
于 2013-03-04T21:45:10.410 回答
0

这是因为for正在返回 2 部电影。为什么不直接使用 XPathdistinct-values()呢?

<Director>
{
distinct-values(doc("actors.xml")/Actors/Actor/Movie[@TITLE=$title]/data(@Director))
}
</Director>
于 2013-03-04T21:42:52.707 回答