2013-03-04 7 views
0

Когда я пытаюсь выполнить код Xquery в файле 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), и это дало мне ответ на показ заголовка. Но поскольку название и режиссер - атрибуты фильма, я не могу получить доступ к одному, используя другой. Когда я перебираю актера, так как есть два актера, у которых один режиссер для одного фильма, имя режиссера дважды печатается. Когда я перебираю фильм, я не могу использовать над ним отличные значения, поскольку это не атрибут.

ответ

1

Ваш XQuery действительно не очень эффективен или легко читается. Вы можете сделать простой xpath:

<Director> 
{ 
data((doc("actors.xml")/Actors/Actor/Movie[@TITLE = $title])[1]/@Director) 
} 
</Director> 
+0

OMG, это сработало так хорошо. Просто простая строка, я обсуждаю ее в течение последних 1 дня, поскольку я не знаю XPath. Возьмите лука! – user2133404

+0

Если ваша проблема решена, вы должны принять ответ (тот, который вам больше всего помог) – dirkk

0

Это потому, что for возвращает 2 фильма. Почему бы вам просто не использовать XPath с distinct-values()?

<Director> 
{ 
distinct-values(doc("actors.xml")/Actors/Actor/Movie[@TITLE=$title]/data(@Director)) 
} 
</Director> 
+0

Xpath работал так хорошо, спасибо тонну !! – user2133404